我正在尝试实现刷新功能。我有多种类型的操作填充我的 tableview,我只是想重新运行最后一个操作。
我有这个属性:
@property (nonatomic, strong) GetRouteOperation* refreshOperation;
其中RouteOperation继承自MKNetworkOperation,它是不同类型RouteOperation的超类,例如“Get routes in radius”、“Get routes by city”等。
我像这样初始化操作:
GetRoutesWithinDistanceOperation *operation = [[GetRoutesWithinDistanceOperation alloc] initOperation];
[self refreshRoutesWithOperation:operation];
我运行这样的操作:
- (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'
为什么?!为什么我不能像第一次那样简单地运行复制的操作。
编辑:
好像实际的 copyForRetry 对我不起作用。或者我以错误的方式使用它。
即使我在复制后尝试直接使用复制的对象,它也会崩溃。这不起作用;我得到同样的例外:
self.refreshOperation = [operation copyForRetry];
[self.refreshOperation getRoutesCompletionHandler:^(NSArray *routes) {
...
}
有人对此有很好的解决方案吗?如何存储最后一次操作以进行刷新?
Edit2:我也尝试使用 NSObject 方法复制,但仍然遇到同样的问题。我想我在复制方法中缺少一些东西。
但是我不需要将这种方法用于解决方案,我只需要一个平滑的解决方案。有任何想法吗?