我想在后台加载Core Data对象,完成后应重新加载TableView。 我不喜欢在tableviewcontroller类中执行所有这些操作,因此我创建了第二个“InternetConnection”类。 InternetConnection类有一个名为“getNewEventsWithDateSpan”的方法
//The method call in TableViewController.m
InternetConnection *connectionForWeekEvents = [[InternetConnection alloc]init];
connectionForWeekEvents.delegate = self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[connectionForWeekEvents getNewEventsWithDateSpan: [self.date_span intValue]];
});
在这个方法中,我构建了一个AFURLSessionManager(我正在使用AFNetworking 2.0)并执行dataTaskWithRequest,当它完成时我调用了一个我在TableViewController.m中实现的委托方法
//Method in InternetConnection.m
-(void)getNewEventsWithDateSpan:(NSInteger)datespan{
//#Doing Init Stuff
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:self.sessionConfiguration];
[[manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
// #I store the receive data in core data
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
if (httpResponse.statusCode ==200) {
[delegate dataComplete]; //<- Delegate Method
}else {
[delegate errorLoading]; //<- Delegate Method
}
}
}
最后,我重新加载TableView。
-(void)dataComplete{
NSLog(@"All Datas were load");
dispatch_after(0, dispatch_get_main_queue(), ^{
_fetchedResultsController = nil;
[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
});
这种方式有效,我得到了正确的结果,但这是一个很好的方法吗?我可能需要加载更多数据,并且可能需要一段时间才能获取所有数据。用户可以离开tableview并切换到另一个viewcontroller。委托方法有问题吗?我应该采取另一种方式吗?
对于建议,我将非常感激!