2013-08-30 6 views
3

Я пытаюсь реализовать функцию обновления. У меня есть несколько типов операций, заполняющих мой tableview, и я просто хочу повторно запустить последнюю операцию.iOS MKNetworkOperation - как повторить последнюю операцию?

У меня есть это свойство:

@property (nonatomic, strong) GetRouteOperation* refreshOperation; 

Если RouteOperation наследует от MKNetworkOperation, и это суперкласс различных типов RouteOperations, например «Получить маршруты в радиусе», «Получить маршруты по городам», и т.д.

Im инициализирует операцию так:

GetRoutesWithinDistanceOperation *operation = [[GetRoutesWithinDistanceOperation alloc] initOperation]; 

[self refreshRoutesWithOperation:operation]; 

Im работает операцию так:

- (void)refreshRoutesWithOperation:(GetRouteOperation *)operation 
{ 

self.refreshOperation = [operation copyForRetry]; 

[operation getRoutesCompletionHandler:^(NSArray *routes) { 
    self.routes = routes; 
    [self.tableView reloadData]; 
} errorHandler:^(NSError *error) { 

} notModifiedHandler:^{ 

}]; 
} 

и он работает в первый раз, когда я беру данные.

Когда я пытаюсь обновить таблицу, как это:

[self refreshRoutesWithOperation:self.refreshOperation]; 

я получаю исключение в этом методе для MKNetworkOperation-класса:

-(void) addCompletionHandler:(MKNKResponseBlock)response errorHandler:(MKNKResponseErrorBlock)error { 

    if(response) 
    [self.responseBlocks addObject:[response copy]]; 
    if(error) 
    [self.errorBlocksType2 addObject:[error copy]]; 
} 

это исключение:

2013-08-30 14:00:32.211 AppName[3500:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI addObject:]: unrecognized selector sent to instance 0x9960540' 

Почему ?! Почему я не могу просто запустить скопированную операцию, как в первый раз.

EDIT:

Кажется, если фактическая copyForRetry не работает для меня. Или я использую его неправильно.

Даже если я попытаюсь использовать скопированный объект непосредственно после его копирования, он сработает. Это не работает; Я получаю то же исключение:

self.refreshOperation = [operation copyForRetry]; 

[self.refreshOperation getRoutesCompletionHandler:^(NSArray *routes) { 
... 
} 

У кого-то есть хорошее решение для этого? Как сохранить последнюю операцию для обновления?

Edit2: Я также пытаюсь использовать экземпляр метода NSObject, но все равно получаю ту же проблему. Я думаю, что есть кое-что, что мне не хватает в методах копирования.

Однако мне не нужно использовать этот подход для решения, мне просто нужно гладкое решение. Есть идеи?

+0

http://stackoverflow.com/questions/3220120/nsmutablearray-addobject-nsarrayi-addobject-unrecognized-selector-sent-t – iPatel

+0

Что значит ..? – ullstrm

+0

Как вы объявляете эти переменные 'responseBlocks' и' errorBlocksType2'? –

ответ

1

Похоже, ошибка в MKNetworkOperation.m (строка 507):

https://github.com/MugunthKumar/MKNetworkKit/blob/master/MKNetworkKit/MKNetworkOperation.m

responseBlock свойство NSMutableArray копируется с "копией" вместо "mutableCopy". По-видимому, мысль автора заключалась в том, что он не может называть «mutableCopy» в методе «копирования», но это не имеет большого смысла, поскольку нет неизменяемого варианта класса MKNetworkOperation.

+0

Вы создали для этого проблему? – Vik

+0

Нет, не стесняйтесь. – lassej

+0

Готово. https://github.com/MugunthKumar/MKNetworkKit/issues/378 – Vik

Смежные вопросы