Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
heroii2009
16 / 6 / 0
Регистрация: 13.03.2012
Сообщений: 196
#1

smart loading data - Программирование iOS

02.04.2013, 17:17. Просмотров 646. Ответов 9
Метки нет (Все метки)

Вот нашел ссылку с помощью ответа в пред ведущей теме, но не могу никак разобраться, как сделать автоматическую загрузку JSON при свайпе в низ, с английским не все в порядке
http://www.lwxted.com/blog/2012/smar...g-table-views/

может кто объяснить как сделать что бы таблица заполнялась по

C
1
2
3
4
5
6
7
@interface MasterViewController : UITableViewController {
    NSArray *tweets;
}
 
- (void)fetchTweets;
 
@end
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- (void)fetchTweets
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSData* data = [NSData dataWithContentsOfURL:
                        [NSURL URLWithString: @"https://api.twitter.com/1/statuses/public_timeline.json"]];
 
        NSError* error;
 
        tweets = [NSJSONSerialization JSONObjectWithData:data
                                                 options:kNilOptions
                                                   error:&error];
 
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.tableView reloadData];
        });
    });
}
C
1
2
3
4
5
- (void)viewDidLoad
{
    [super viewDidLoad];
    [self fetchTweets];
}
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return tweets.count;
}
 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"TweetCell";
 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
 
    NSDictionary *tweet = [tweets objectAtIndex:indexPath.row];
    NSString *text = [tweet objectForKey:@"text"];
    NSString *name = [[tweet objectForKey:@"user"] objectForKey:@"name"];
 
    cell.textLabel.text = text;
    cell.detailTextLabel.text = [NSString stringWithFormat:@"by %@", name];
 
    return cell;
}
подскажите как совместить эти 2 программы, как в программе что я дал ссылку поменять запрос, на JSON в место того что она заполняется данными из цикла
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2013, 17:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос smart loading data (Программирование iOS):

Язык программирования smart BASIC на iOS - Программирование iOS
Всем привет! Программировать для iOS можно ведь не только в Xcode на Маке. Можно прямо на самом iOS, причем даже не обладая большой...

core data, две сущности - Программирование iOS
Привет. Есть база, в ней две сущности, предположим «факультет» и «студент» между ними связь много к одному и обратно). Требуется ...

Improve Core Data skills - Программирование iOS
Привет всем. Как-то так печально у меня складывался рабочий опыт, что с CoreData особо проектов и не было. А если и было (две штуки),...

Нужно разъяснение с Core Data - Программирование iOS
Всем привет! Толи я идиот тупой, толи с возрастом соображалка перестает работать нормально, но я никак ни по книжкам, ни по примерам...

core data newManagedObject setValue: - Программирование iOS
Уважаемые форумчане! Возникла следующая проблема: создаю DataModel, добавляю Entity, добавляю attribute string. Когда выполняю ......

Core Data проверка уникальности записи - Программирование iOS
Добрый вечер! Вливаюсь в CoreData потихоньку, почти все понятно, кроме вот чего: не могу до конца понять, как работает проверка данных. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Dan_banan_
10 / 10 / 1
Регистрация: 03.03.2013
Сообщений: 87
Записей в блоге: 1
02.04.2013, 18:49 #2
что такое загрузка при свайпе вниз? наверно надо сначала в это разобраться? твоя *TableView привязана к массиву, в массиве соответсвенно данные которые ты должен туда записать. Я так полагаю ты хочешь что бы тебе приходили json который соответсвенно надо парсить и представлять к какаму то виду для добавления в массив. А теперь по- порядку:
- что бы получать различные запросы ну тоесть разные json согласно запросу надо наверно формировать эти запросы))
- надо создать свою абстрактную модель к которой ты будешь приводить распарсенный json
- данные в массив добавляются асинхронно
- при свайпе вниз или вверх из массива затягиваются новые обьекты и формируется ячейка

Тоесть тебе надо создать класс с полями. При приходе нового json ты создаешь обьект этого класса и заполняешь его распарсенными значениями и добавляешь обьект в массив. Это делать надо в фоновом потоке. А при свайпе эти обьекты будут затягиваться из массива в твою *TableView. Вот и все))
0
heroii2009
16 / 6 / 0
Регистрация: 13.03.2012
Сообщений: 196
02.04.2013, 19:15  [ТС] #3
Цитата Сообщение от Dan_banan_ Посмотреть сообщение
что такое загрузка при свайпе вниз? наверно надо сначала в это разобраться? твоя *TableView привязана к массиву, в массиве соответсвенно данные которые ты должен туда записать. Я так полагаю ты хочешь что бы тебе приходили json который соответсвенно надо парсить и представлять к какаму то виду для добавления в массив. А теперь по- порядку:
- что бы получать различные запросы ну тоесть разные json согласно запросу надо наверно формировать эти запросы))
- надо создать свою абстрактную модель к которой ты будешь приводить распарсенный json
- данные в массив добавляются асинхронно
- при свайпе вниз или вверх из массива затягиваются новые обьекты и формируется ячейка

Тоесть тебе надо создать класс с полями. При приходе нового json ты создаешь обьект этого класса и заполняешь его распарсенными значениями и добавляешь обьект в массив. Это делать надо в фоновом потоке. А при свайпе эти обьекты будут затягиваться из массива в твою *TableView. Вот и все))
у меня голова окончательно взорвалась, я сделал рефреш только мне нужен он не для добавления а для обновления страницы, тоесть у меня добавляються самые новые "данные", там просто есть стандартная функция Refresh и вызов метода идет за ново и все.
0
Dan_banan_
10 / 10 / 1
Регистрация: 03.03.2013
Сообщений: 87
Записей в блоге: 1
02.04.2013, 19:30 #4
изложи более конкретнее что тебе надо)) ты хочешь что бы когда ты тянул таблицу вниз загружался новый json.окей) а что в это время должно отображаться в таблице? на момент когда ты тянешь таблицу вниз новые данные подтягиваются из массива тоесть заведомо они уже там должны быть, хотя бы часть их. Тоесть тебе надо грузить данные в этой массив асинхронно до того как ты скролишь таблицу. вот и все) или мне надо весь код написать что бы было понятно))
0
heroii2009
16 / 6 / 0
Регистрация: 13.03.2012
Сообщений: 196
02.04.2013, 19:38  [ТС] #5
Цитата Сообщение от Dan_banan_ Посмотреть сообщение
изложи более конкретнее что тебе надо)) ты хочешь что бы когда ты тянул таблицу вниз загружался новый json.окей) а что в это время должно отображаться в таблице? на момент когда ты тянешь таблицу вниз новые данные подтягиваются из массива тоесть заведомо они уже там должны быть, хотя бы часть их. Тоесть тебе надо грузить данные в этой массив асинхронно до того как ты скролишь таблицу. вот и все) или мне надо весь код написать что бы было понятно))
теперь суть понял, думаю сделать так, просто 2 одинаковых массива, когда тяну в низ 1 массив который в таблице так в ней и остается, когда второй массив полностью загрузится то первый очищается и в него копируется второй и перезагрузка таблицы, я все так понял ?
0
ziwn2010
5 / 5 / 0
Регистрация: 13.12.2012
Сообщений: 104
02.04.2013, 19:51 #6
Цитата Сообщение от Dan_banan_ Посмотреть сообщение
изложи более конкретнее что тебе надо)) ты хочешь что бы когда ты тянул таблицу вниз загружался новый json.окей) а что в это время должно отображаться в таблице? на момент когда ты тянешь таблицу вниз новые данные подтягиваются из массива тоесть заведомо они уже там должны быть, хотя бы часть их. Тоесть тебе надо грузить данные в этой массив асинхронно до того как ты скролишь таблицу. вот и все) или мне надо весь код написать что бы было понятно))
Не подскажите ли какой кусок кода отвечает за свайп в низ из сайта что выше ?
0
Dan_banan_
10 / 10 / 1
Регистрация: 03.03.2013
Сообщений: 87
Записей в блоге: 1
02.04.2013, 23:18 #7
Добавлено через 2 минуты
ziwn2010,

- (UITableViewCell *)tableViewUITableView *)tableView cellForRowAtIndexPathNSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"TweetCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

NSDictionary *tweet = [tweets objectAtIndex:indexPath.row];
NSString *text = [tweet objectForKey:@"text"];
NSString *name = [[tweet objectForKey:@"user"] objectForKey:@"name"];

cell.textLabel.text = text;
cell.detailTextLabel.text = [NSString stringWithFormat:@"by %@", name];

return cell;

Вот этот метод вызывается каждый раз когда пользователь начинает скролить табличку. Тоесть когда должна появиться новая ячейка вызывается этот метод который собственно ее и создает

Добавлено через 3 минуты
Здесь в качестве обьекта выступает так называемый NSDictionary. Тоесть массив хранит в себе много словарей. При свайпе таблицы из массива вынимается очередной словать
NSDictionary *tweet = [tweets objectAtIndex:indexPath.row];
и значени из словаря записываются в ячейку
NSString *text = [tweet objectForKey:@"text"];
NSString *name = [[tweet objectForKey:@"user"] objectForKey:@"name"];

cell.textLabel.text = text;
cell.detailTextLabel.text = [NSString stringWithFormat:@"by %@", name];

Добавлено через 17 секунд
все предельно просто))
0
heroii2009
16 / 6 / 0
Регистрация: 13.03.2012
Сообщений: 196
02.04.2013, 23:34  [ТС] #8
Цитата Сообщение от Dan_banan_ Посмотреть сообщение
Добавлено через 2 минуты
ziwn2010,

- (UITableViewCell *)tableViewUITableView *)tableView cellForRowAtIndexPathNSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"TweetCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

NSDictionary *tweet = [tweets objectAtIndex:indexPath.row];
NSString *text = [tweet objectForKey:@"text"];
NSString *name = [[tweet objectForKey:@"user"] objectForKey:@"name"];

cell.textLabel.text = text;
cell.detailTextLabel.text = [NSString stringWithFormat:@"by %@", name];

return cell;

Вот этот метод вызывается каждый раз когда пользователь начинает скролить табличку. Тоесть когда должна появиться новая ячейка вызывается этот метод который собственно ее и создает

Добавлено через 3 минуты
Здесь в качестве обьекта выступает так называемый NSDictionary. Тоесть массив хранит в себе много словарей. При свайпе таблицы из массива вынимается очередной словать
NSDictionary *tweet = [tweets objectAtIndex:indexPath.row];
и значени из словаря записываются в ячейку
NSString *text = [tweet objectForKey:@"text"];
NSString *name = [[tweet objectForKey:@"user"] objectForKey:@"name"];

cell.textLabel.text = text;
cell.detailTextLabel.text = [NSString stringWithFormat:@"by %@", name];

Добавлено через 17 секунд
все предельно просто))
да в этом я тоже разобрался, но блин пытался переделать нечего не вышло
дает ошибку по скольку тут я использую тип Data и когда пытаюсь передать его через делегат дает ошибку, не знаю как ее решить
0
Dan_banan_
10 / 10 / 1
Регистрация: 03.03.2013
Сообщений: 87
Записей в блоге: 1
02.04.2013, 23:54 #9
tweets = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
Вот тебе ответ на все вопросы.
Я точно не помню подробно не охото сейчас лезть в код. При загрузке из интернета каждый раз вызывается делегат который передает данные порциями. По окончанию вызывается метод типа финишь и приходит вся порция данных типа Data. Еее нужно дисереализовать тоесть выннуть из нее массив. Тоесть ты можешь написать что то подобное как у тебя примере. Тебе не надо передавать саму data через делегат. тебе надо получить json диссериализовать его и сформировать обьект. Вот к пример тебе пришел json такой структуры

{
id = 01;
name = "bla bla "
}

Ты создаешь свой класс с полями типа id и name. Потом каждый раз когда приходит новый json создаешь обьект этого класса ну примерно так
id json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
если json как массив просто без вложенностей то можно написать так
Object *obj = [[Object alloc]init];
obj.id = [((NSMytableArray*)json objectForIndex:0];
obj.name = [((NSMytableArray*)json objectForIndex:1];
где obj это твой обьект класса который ты создал для конкретного json.
И уже потом передавать этот обьект типа так [self.delegate sendObject:obj];
sendObject - этот метод который ты напишешь сам для передачи обьекта в класс который привязан к твоей таблице

пример реализации этого метода

-(void)sendObjectObject*)obj
{
if(obj!=nill)
{
[self.array addObject : obj];
[self.tableView reloadDate];
}
}

Добавлено через 30 секунд
устал печатать))
0
heroii2009
16 / 6 / 0
Регистрация: 13.03.2012
Сообщений: 196
03.04.2013, 00:13  [ТС] #10
Цитата Сообщение от Dan_banan_ Посмотреть сообщение
tweets = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
Вот тебе ответ на все вопросы.
Я точно не помню подробно не охото сейчас лезть в код. При загрузке из интернета каждый раз вызывается делегат который передает данные порциями. По окончанию вызывается метод типа финишь и приходит вся порция данных типа Data. Еее нужно дисереализовать тоесть выннуть из нее массив. Тоесть ты можешь написать что то подобное как у тебя примере. Тебе не надо передавать саму data через делегат. тебе надо получить json диссериализовать его и сформировать обьект. Вот к пример тебе пришел json такой структуры

{
id = 01;
name = "bla bla "
}

Ты создаешь свой класс с полями типа id и name. Потом каждый раз когда приходит новый json создаешь обьект этого класса ну примерно так
id json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
если json как массив просто без вложенностей то можно написать так
Object *obj = [[Object alloc]init];
obj.id = [((NSMytableArray*)json objectForIndex:0];
obj.name = [((NSMytableArray*)json objectForIndex:1];
где obj это твой обьект класса который ты создал для конкретного json.
И уже потом передавать этот обьект типа так [self.delegate sendObject:obj];
sendObject - этот метод который ты напишешь сам для передачи обьекта в класс который привязан к твоей таблице

пример реализации этого метода

-(void)sendObjectObject*)obj
{
if(obj!=nill)
{
[self.array addObject : obj];
[self.tableView reloadDate];
}
}

Добавлено через 30 секунд
устал печатать))
спасибо большое буду сейчас думать ))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2013, 00:13
Привет! Вот еще темы с ответами:

Использование Core Data в статической библиотеке - Программирование iOS
Доброго времени суток. Прошу у вас помощи в разъяснение важного мне вопроса. Я пишу статическую библиотеку для iOS. Всё бы хороше, да...

remote office manager + nod smart nod smart security - Сети
привет всем! кто сталкивался с проблемой когда нод смарт блокировал ром как можно этого избежать не отключая защиту антивируса ? зарание...

Error BC30466: Namespace or type 'Data' for the Imports 'System.Data' cannot be found - Visual Basic .NET
.NET beta 2 Пытаюсь писать vb под asp.net и откомпилять в dll... Вот заголовок: Imports System Imports System.Web Imports...

Открыть файл из папки /data/data/com.myapp/files/appdata/ - Программирование Android
я закачиваю файлы в папку приложения и файлы попадают сюда: /data/data/com.myapp/files/appdata/ но открывать мне их нужно либой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.04.2013, 00:13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru