我正在调试一个使用多线程核心数据的应用程序,我在objc_exception_throw上有一个断点,它在保存调用中遇到了这个断点。 (代码中的第2行)
NSError *error = nil;
[self.managedObjectContext save:&error];
if (error) {
NSLog(@"Error : %@",error);
}
我没有任何记录的东西。 我正在使用带有ios 4.0的Xcode 4 - > 4.3。我认为这与Xcode / iOS版本无关。
答案 0 :(得分:7)
查看此answer表明CoreData内部使用异常来管理其程序流。这就是调试器在objc_exception_throw中断的原因。据我所知,没有办法禁用它。
编辑:从那时起,现在有一个解决方案可以忽略这些例外:Ignore certain exceptions when using Xcode's All Exceptions breakpoint
顺便说一句:请勿查看error
,但请使用返回的BOOL
值来确保您的保存通话成功。这样做的正确方法是:
NSError *error = nil;
BOOL success = [self.managedObjectContext save:&error];
if (!success) {
NSLog(@"Error : %@",error);
}
答案 1 :(得分:4)
答案 2 :(得分:1)
我遇到了类似的问题,最终结果是由于 NSManagedObjectContextDidSaveNotification 的观察者已被解除分配而未从通知中心移除。似乎CoreData异常“隐藏”了当通知中心尝试通知任何对象占用已注册(但已解除分配)的观察者释放的内存时引发的未知选择器异常。
答案 3 :(得分:0)
我碰巧遇到了这个问题,经过很长时间的调试我发现它是因为NSError *错误的重复声明,你可能在外部作用域中有另一个NSError *错误,如:
NSError* error = nil;
一些代码
if (!error)
{
NSError* error = nil;
// your code
}
然后错误将为零,尽管事实上存在例外。
答案 4 :(得分:0)
最近我遇到了同样的问题:在尝试保存managedObjectContext时,app没有任何日志崩溃。
就我而言,上面提到的原因完全不同:
确保您的Mac上没有打开DB Manager,这可能会锁定持久数据存储。
这(显然)也会杀死Core Date堆栈,而不会在代码或日志中抛出任何可见的错误。
原来我有一些未保存的更改,这使得DB Manager锁定了商店。关闭数据库管理器修复了该问题。简单而愚蠢的错误,但花了我几个小时才弄明白。