【发布时间】:2014-03-17 17:15:38
【问题描述】:
我的 iOS 7 应用程序崩溃并出现以下错误:
-[NSError release]: message sent to deallocated instance 0x3c443fe0
当我添加对以下方法的调用时引发错误:
-(void)loadMessages:(NSString*)customerUID {
NSString *formatUID = [NSString stringWithFormat:@"%s%@%s", "'", customerUID, "'"];
formatUID = [formatUID stringByReplacingOccurrencesOfString:@"'" withString:@"%27"];
NSString *servicePath = [NSString stringWithFormat:@"/api/messagerecipient?messageid=null&customeruid=%@", formatUID];
[[RKObjectManager sharedManager] getObjectsAtPath:servicePath parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *messagesResult)
{
NSArray *messageResults = messagesResult.array;
if (messageResults != nil || [messageResults count] != 0)
{
//Add some code here
}
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"An Error Has Occurred" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
}];
}
我在代码的不同点添加了多个断点,但它没有返回任何错误详细信息。此外,控制台日志中没有任何内容表明问题出在哪里(我添加了完整的 RestKit 日志记录),只是上面的 NSError 发布消息。
我还在 Instruments 中运行了 Zombie 扫描。它显示以下内容。
我很困惑,因为这表明僵尸是由GSEventRunModal 调用创建的。当我转到扩展详细信息并选择呼叫时,它显示以下内容:
任何指点将不胜感激,谢谢。
更新:仪器扩展详细信息堆栈跟踪
【问题讨论】:
-
那么是什么让您认为这与 RestKit 相关?如果您不拨打 RestKit 电话,那么您就没有问题吗?
-
是的,没错,但不确定它是否与 RestKit 有关。命中的最后一个断点在 AFURLConnectionOperation, operationDidStart 方法中。似乎抛出错误的进程是_CFRunLoopRun。
-
您的映射应该创建托管对象并插入到存储中?提出此请求时,您有哪些未保存的内容?您还同时使用 Core Data 做什么?
-
对于分配了
NSError的站点,从扩展的详细信息窗格中查看整个堆栈跟踪会很有用。 -
僵尸不是由
GSEventRunModal创建的。当您在GSEventRunModal中看到 Release 时,表示自动释放池正在耗尽。事件历史记录中的最后一行(第 7 行)是一个额外的释放(被发送到在第 6 行变成僵尸的NSError),因为NSError被自动释放太多次。
标签: ios objective-c core-data restkit nserror