【发布时间】:2014-10-12 12:27:19
【问题描述】:
我在 iOS 8 下遇到了一些错误,导致我的 iPhone 应用程序冻结。在使用 RestKit 从后端加载数据期间,我不知道为什么 :getObjectsAtPath 方法中的代码没有执行。我假设应该从这个方法的成功或失败块返回代码。看起来其余套件正在尝试从后端获取数据,因为我可以看到网络活动指示器微调器仍然处于活动状态。我不知道我怎么可能调查这个问题,因为 Xcode 没有返回任何错误。该应用程序仍在运行,但我无法点击后退按钮跳转到父视图。
-(void)loadAlerts{
_credentials = [[EFCredentials alloc]init];
NSString *rememberToken = [_credentials authToken];
if ([EFReachabilityManager isReachable]) {
[[[RKObjectManager sharedManager]HTTPClient]setDefaultHeader:@"Authorize" value:rememberToken];
RKResponseDescriptor *responseDescriptor =
[RKResponseDescriptor responseDescriptorWithMapping:[EFMappingProvider alertsMapping]
method:RKRequestMethodGET
pathPattern:[NSString stringWithFormat:@"/%@/alerts.json",_id]
keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[[RKObjectManager sharedManager]addResponseDescriptor:responseDescriptor];
[[RKObjectManager sharedManager] getObjectsAtPath:[NSString stringWithFormat:@"/wearers/%@/alerts.json",_wearer_id] parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult){
NSLog(@"%@",mappingResult.array);
[self.tableView reloadData];
}
failure:^(RKObjectRequestOperation *operation, NSError *error) {
UIAlertView *alertView =
[[UIAlertView alloc] initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
}
];
}
else{
_alertViewReachability = [[UIAlertView alloc]initWithTitle:@"Error" message:@"No network connection " delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Try again", nil];
[_alertViewReachability show];
}
}
libsystem_kernel.dylib`semaphore_wait_trap: 0x196954eb0: 移动 x16, #35
0x196954eb4: 服务端 #128
0x196954eb8:返回
【问题讨论】:
-
如果你不调用RestKit,按钮是否有效?
-
是的,该按钮无需休息套件即可工作,因为它只是一个简单的“返回”栏按钮。我已经在 iOS 7 上测试了该应用程序,并且相同的代码可以正常工作。
-
并且
getObjectsAtPath被调用了,但是两个回调都没有被调用?打开跟踪日志并使用分析器查看应用程序在“锁定”时正在做什么。 -
检查我的更新答案
-
如果不看更多代码就很难判断,但看起来可能会出现死锁。
EFAlertsHistoryTVC中的refreshData:方法正在响应通知。也许该方法中的某些东西正在同步等待在方法返回之前不可用的数据。你能发布这个方法的代码吗?