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

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

Войти
Регистрация
Восстановить пароль
 
ziwn2010
5 / 5 / 0
Регистрация: 13.12.2012
Сообщений: 104
#1

обновление списка - Программирование iOS

03.04.2013, 23:33. Просмотров 940. Ответов 11
Метки нет (Все метки)

Делаю типа читалки твитера (stroyboard) , отправляю запрос заполнения таблицы
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData* data = [NSData dataWithContentsOfURL:
[NSURL URLWithString:[NSString stringWithFormat: @"http://api.twitter.com/1/statuses/user_timeline.json?screen_name=wylsacom&count=%d&include_entities=1&include_rts=1",pag]]];
 
NSError* error;
self.tableView.scrollEnabled = true ;
tweets = [NSJSONSerialization JSONObjectWithData:data
options:kNilOptions
error:&error];
 
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
 
});
});
где pag = 10, количество твитов при запуске, делаю потом автоматическую подгрузку в список
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row % 25 == 0)
{
 
pag = pag + 20 ;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData* data = [NSData dataWithContentsOfURL:
[NSURL URLWithString:[NSString stringWithFormat: @"http://api.twitter.com/1/statuses/user_timeline.json?screen_name=wylsacom&count=%d&include_entities=1&include_rts=1",pag]]];
 
NSError* error;
self.tableView.scrollEnabled = true ;
tweets = [NSJSONSerialization JSONObjectWithData:data
options:kNilOptions
error:&error];
 
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
 
});
});
 
}
}
все работает, но вот в чем беда после пары таких скролингов меня выкидывает в xcode с ошибкой типа
2013-04-03 21:48:29.906 Twitter Test[364:1b03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'data parameter is nil'
*** First throw call stack:
(0x1c98012 0x10d5e7e 0x1c97deb 0xc09f47 0x2aec 0x49fc53f 0x4a0e014 0x49ff2e8 0x49ff450 0x92c51e12 0x92c39cca)
libc++abi.dylib: terminate called throwing an exception

я так понимаю приходят пустые параметры, сервер twitter меня блокирует потому что я отправляю слишком много запросов или что-то такое я вообщем могу только догадываться, вообщем помогите пожалуйста как это обойти, и вообще что это ?
забыл сказать после того как начинает появляться эта ошика, я минут 15 запуская это приложение получаю эту же ошибку, а когда проходит это время все нормально, но потом снова по кругу скролинг, ошибка, 15 минут ожидания...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2013, 23:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос обновление списка (Программирование iOS):

Обновление iphone 4s - Программирование iOS
Хорошее ли обновление IOS 9.3.1 на Iphone 4s?

Обновление данных в таблице - Программирование iOS
Добрый день! При работе над проектом возник вопрос... Есть таблица, есть метод загрузки данных с сервера. Когда приходят данные метод...

Обновление Annotation на MKMapView - Swift
Добрый день подскажите как мне решить одну проблему: у меня есть динамический массив, с данными, которые я получаю с сервера, там...

Обновление Enterprise приложения - Программирование iOS
Доброго времени суток! Подскажите, пожалуйста, может сталкивался кто-нибудь. Прошел год с момента регистрации Enterprise аккаунта и...

Обновление одного контроллера другим - Программирование iOS
Здравствуйте, уважаемые коллеги! Решил вот написать программу в OS X с "хорошо пахнущим кодом". Отделил бизнес-логику в отдельные...

Обновление XCode -> тормоза в StoryBoard - Программирование iOS
Всем привет! В первый же день выхода обновления XCode 5.0 - поставил новую версию, и моментально появились жестокие тормоза в...

11
opi
7 / 7 / 1
Регистрация: 09.11.2010
Сообщений: 69
03.04.2013, 23:38 #2
Не могу сказать точно, но если чисто логически подумать, то сообщение 'data parameter is nil' может указывать на то, что количество твитов подошло к концу. Вполне логично тогда добавить исключение на этот случай.
0
ziwn2010
5 / 5 / 0
Регистрация: 13.12.2012
Сообщений: 104
03.04.2013, 23:41  [ТС] #3
Цитата Сообщение от opi Посмотреть сообщение
Не могу сказать точно, но если чисто логически подумать, то сообщение 'data parameter is nil' может указывать на то, что количество твитов подошло к концу. Вполне логично тогда добавить исключение на этот случай.
поспорю, по скольку такая ситуация, я загружаю приложение и указанное количество загружается сразу, начинаю подгружать пару раз проходит все хорошо, но когда получается эта ошибка, я запускаю приложение еще раз и уже когда должно стандартно первое количество твитов загрузить дает ту же ошибку
0
Dan_banan_
11 / 11 / 1
Регистрация: 03.03.2013
Сообщений: 87
Записей в блоге: 1
04.04.2013, 12:46 #4
Это все криво написано просто вот и все падает. Сделай асинхронную загрузку твитов в массив вынеси работу по загрузке в отдельную сущность. Поставь проверки на nill перед добавлением. при приходе новой порции данных оберни в трай кетч. Правильно обработай что мол если ошибка пошли запрос еще раз и так далее тогда все будет норм
0
ziwn2010
5 / 5 / 0
Регистрация: 13.12.2012
Сообщений: 104
04.04.2013, 21:19  [ТС] #5
Цитата Сообщение от Dan_banan_ Посмотреть сообщение
Это все криво написано просто вот и все падает. Сделай асинхронную загрузку твитов в массив вынеси работу по загрузке в отдельную сущность. Поставь проверки на nill перед добавлением. при приходе новой порции данных оберни в трай кетч. Правильно обработай что мол если ошибка пошли запрос еще раз и так далее тогда все будет норм
честно скажу, знал бы как это сделать, давно уже бы сделал....
0
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
04.04.2013, 21:50 #6
Цитата Сообщение от Dan_banan_ Посмотреть сообщение
при приходе новой порции данных оберни в трай кетч
Фу какая JAVA гадость.


Цитата Сообщение от Dan_banan_ Посмотреть сообщение
Поставь проверки на nill перед добавлением.
А вот проверка на nil нужна, да.
Перед парсингом из JSON поставьте проверку вашей "data" на nil.

Добавлено через 2 минуты
Цитата Сообщение от ziwn2010 Посмотреть сообщение
честно скажу, знал бы как это сделать, давно уже бы сделал....
Значится GCD пользуем, а как сделать проверку входных параметров - не знаем? Уууужас.
Objective-C
1
2
3
if (trololo == nil) {
   return;
}
Как то так. Совсем по простому если.
0
ziwn2010
5 / 5 / 0
Регистрация: 13.12.2012
Сообщений: 104
04.04.2013, 22:11  [ТС] #7
Цитата Сообщение от zulkis Посмотреть сообщение
Фу какая JAVA гадость.



А вот проверка на nil нужна, да.
Перед парсингом из JSON поставьте проверку вашей "data" на nil.

Добавлено через 2 минуты

Значится GCD пользуем, а как сделать проверку входных параметров - не знаем? Уууужас.
Objective-C
1
2
3
if (trololo == nil) {
   return;
}
Как то так. Совсем по простому если.
не не проверку я знаю как сделать
Но все же это не решает мою проблему, пусть прийдет пустой JSON, 15 минут будет срабатывать проверка и не подгружать данные? это чет не ок мне кажется )
0
Dan_banan_
11 / 11 / 1
Регистрация: 03.03.2013
Сообщений: 87
Записей в блоге: 1
04.04.2013, 22:21 #8
какие 15 минут о чем вообще речь!? У тебя приложение падает потому что ты пытаешься сиреализовать данные которых нет. тоесть ты передаешь обьект который равен нилу. вот где

Objective-C
1
tweets = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions
перед этой строчкой напиши что если data равна нил то выйти из функции. Тогда он не будет грузить пустую порцию а загрузить следующую вот и все.
0
ziwn2010
5 / 5 / 0
Регистрация: 13.12.2012
Сообщений: 104
04.04.2013, 22:30  [ТС] #9
Цитата Сообщение от Dan_banan_ Посмотреть сообщение
какие 15 минут о чем вообще речь!? У тебя приложение падает потому что ты пытаешься сиреализовать данные которых нет. тоесть ты передаешь обьект который равен нилу. вот где

Objective-C
1
tweets = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions
перед этой строчкой напиши что если data равна нил то выйти из функции. Тогда он не будет грузить пустую порцию а загрузить следующую вот и все.
а почему тогда, после того как я приложение закрой, и за ново на компиляцию отправляю, оно включается и нечего не запускает и снова ошибка ??
0
Dan_banan_
11 / 11 / 1
Регистрация: 03.03.2013
Сообщений: 87
Записей в блоге: 1
04.04.2013, 22:35 #10
Так же попробуй загрузить сразу много данных без скролинга таблицы. Пропиши в коде что бы сразу много загружалось и посмотри как что приходит
0
heroii2009
16 / 6 / 0
Регистрация: 13.03.2012
Сообщений: 196
04.04.2013, 22:59 #11
Цитата Сообщение от Dan_banan_ Посмотреть сообщение
Так же попробуй загрузить сразу много данных без скролинга таблицы. Пропиши в коде что бы сразу много загружалось и посмотри как что приходит
сделал я эту проверку, при первой загрузке данных и при сколинге, загрузило оно записей 60-80, не считал, и перестало грузить, перезапустил приложение и все даже первый запуск в котором стандартные 20 грузит, грузить не хочет

Добавлено через 7 минут
Цитата Сообщение от Dan_banan_ Посмотреть сообщение
Так же попробуй загрузить сразу много данных без скролинга таблицы. Пропиши в коде что бы сразу много загружалось и посмотри как что приходит
Вот мне кажется что проблема в этой строке
C
1
if (indexPath.row % 25 == 0)
я думаю что оно делит общее количество ячеек, по скольку я загружаю по 20-30, делит их на эти 25 и отправляет количество запросов, а сервер думает что я его дедосю, и банит на время, я изменил эту строку на
C
1
if (indexPath.row % (25 +pag))
и теперь по идее эти 25 + количество ячеек сколько я еще подгружаю там будет получаться 55, потом 85 и т.д. по идее отправлятся будет 1 запрос, пройдет время когда начнет подгружать, проверю мою теорию )
0
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
05.04.2013, 13:13 #12
Цитата Сообщение от heroii2009 Посмотреть сообщение
if (indexPath.row % 25 == 0)
Нехорошее условие.
Хорошее будет примерно такое (с вариациями по месту):
Цитата Сообщение от heroii2009 Посмотреть сообщение
if (indexPath.row == [items.count - 1] && !requestSent)
requestSent - признак того, что новый реквест отправлен, но респонс еще не получен.
0
05.04.2013, 13:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2013, 13:13
Привет! Вот еще темы с ответами:

Обновление списка после обновления другого списка - C# ASP.NET
У меня есть таблица следующего вида : Наименование(список) , количество , стоимость. Но из-за большого перечня товаров приходится...

Обновление выпадающего списка в форме в зависимости от выпадающего списка выше - MS Access
Есть 3 таблицы (1,2,3) Первая и вторая связаны между собой через таблицу 3. Есть 3 выпадающих списка в Form1. Нужно что бы во втором...

обновление списка - C++ WinAPI
static HWND hWndList;//дескриптор списка int WINAPI WinMain(HINSTANCE hlnst,HINSTANCE,LPSTR,int) { ... try { ...

Обновление списка - MS Access
База данных клиентов стоматологии. Для регистрации клиента и оказанных ему услуг (стом. операций), подсчета стоимости. Такая вот...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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