Цель C: Как автоматически убить вызов сервера через X секунд? - PullRequest
0 голосов
/ 30 июля 2011

В моем приложении есть требование получить некоторые данные (в форме 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.

...