我有一个应用程序,它使用 AFNetworking 从 Web 服务中检索 json(员工工作计划)并将它们显示在表格视图中。
我有我的网络服务类来处理请求,一旦完成,它将这些数据存储到 coredata 中(我这里还有一个问题,我使用了 magicRecord 并且数据不会持久存在,我不明白为什么)然后回调它的委托(我的 tableViewController)告诉它它已经完成,所以这可以将工作计划加载到单元格中。
网络服务客户端.m
NSURL *url = [NSURL URLWithString:stringUrl];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON)
{
NSArray *workSchedules = [[[NSSet alloc] initWithArray:JSON] allObjects];
NSManagedObjectContext *context = [NSManagedObjectContext MR_contextForCurrentThread];
Workschedule *workscheduleEntity = nil;
NSError *error = nil;
for (NSDictionary *web_workschedule in workSchedules)
{//Inside this method I create other entities that will hydrate my workschedule entity, and it is done using the MR_CreateInContext
workscheduleEntity = [Workschedule workScheduleFromJSONDictionary:web_workschedule withError:&error];
[context MR_save];
}
if([self.delegate respondsToSelector:@selector(workSchedules)]){
[self.delegate workSchedules];
}
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
LOG_ERROR(2,@"Received an HTTTP %d:", response.statusCode);
LOG_ERROR(2,@"The error was: %@", error);
if([self.delegate respondsToSelector:@selector(workSchedules:)]){
[self.delegate workSchedules:nil];//return error
}}];
NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];
[operationQueue addOperation:operation];
}
PendingWorkscheduleViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
[self.webServiceClient getMockedWorkSchedulesForEmployee:[NSNumber numberWithInt:1]];
[self workSchedules];
}
-(void)workSchedules
{
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"pending == YES"];
NSArray *pendingWorkSchedules = [Workschedule MR_findAllWithPredicate:predicate];
self.pendingWorkSchedules = pendingWorkSchedules;
[self.tableView reloadData];
}
我的问题是,当我在处理请求时运行此程序时,UI 没有响应(这是一个非常短暂的时间,但如果请求增加......)所以如果我加载表格视图并立即尝试滚动或单击后退按钮,它只是忽略它,因为它是“冻结”的。这种行为在我的 iphone 4s 上。在模拟器上这工作正常,我无法理解为什么会这样。我试图调用“[self.webServiceClient getMockedWorkSchedulesForEmployee:[NSNumber numberWithInt:1]];” 在使用 GCD 的队列中,我尝试使用 performSelectorInBackground: WithObject: etc 但仍然相同(尽管使用最后一种方法似乎更有效,但这是一种印象,仅在模拟器上,设备上没有变化)。
就magicRecord而言,我将提出单独的问题。
我会很感激你的帮助。