В моем приложении есть требование получить некоторые данные (в форме JSON) с сервера.
Фрагмент кода следующим образом:
- (void) getData
{
self.notificationArray=nil;
Loader *loader = [[Loader alloc]initWithResourcePath:@"/notifications.json"];
loader.viewToShowLoading=self.navigationController.view;
[loader setCompletionHandler:^(NSArray *anArray){
self.notificationArray=anArray;
[self.notificationTableView reloadData];
[loader release];
}];
[loader getObjects];
}
Однако я иногда сталкиваюсь с неизвестной ошибкой, из-за которой приложение просто зависает при обработке получения данных с сервера (спиннер не останавливается),Есть ли способ заставить загрузчик убить себя, скажем, через x раз?
Реализация загрузчика может быть показана ниже (не полностью).Я использую блоки и Restkit для взаимодействия IOS с сервером.
EDIT - добавлены подробности о реализации загрузчика
@implementation Loader
@synthesize resourcePath, viewToShowLoading;
-(id)initWithResourcePath:(NSString *)thisResourcePath
{
self = [super init];
if (self)
{
self.resourcePath = thisResourcePath;
}
return self;
}
-(void)setCompletionHandler:(BlockWithArrayParam)bblock
{
[completionHandler release];
completionHandler = [bblock copy];
}
-(void)getObjects
{
RKObjectManager *sharedManager = [RKObjectManager sharedManager];
[self showLoading];
[sharedManager loadObjectsAtResourcePath:self.resourcePath delegate:self];
}
//Spinner during loading of data from server
- (void) showLoading{
if (viewToShowLoading) {
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:viewToShowLoading animated:YES];
hud.labelText = @"Loading...";
}
}
//Hide spinner when loading is completed
- (void) hideLoading{
if (viewToShowLoading) {
[MBProgressHUD hideHUDForView:viewToShowLoading animated:YES];
}
}
Как уже упоминалось, бывают случаи, когда «spinner» не исчезает.И я не уверен точно, с какой ошибкой столкнулось приложение.Таким образом, вместо того, чтобы пытаться раскрыть все возможные точки отказа, я надеюсь найти способ автоматического уничтожения этого вызова сервера 'getObjects' через определенное время, чтобы смягчить случаи, когда 'spinner' скрывает dpes mpt.