此代码因非致命异常而中断,但未提供重要的错误信息。这是在更新核心数据实体之后。
-(void) commitBackgroundChangesAndNotify:(NSString *)notification{
NSLog(@"enter commit");
if([self.backgroundMOC hasChanges]) {
NSError *error = nil;
if (!([self.backgroundMOC save:&error])){ // breaks here
NSLog(@"Unresolved Error %@ %@", error, [error userInfo]);
}
// [[NSNotificationCenter defaultCenter] postNotificationName:notification object:nil];
}
NSLog(@"exit commit");
}
无论我是否启用了断点,它都会在调试器中中断。如果我在没有调试器的情况下运行它,它似乎运行正常。
此代码在 NSOperation 期间运行多次。在操作过程中,中断发生在第二次调用保存时(意味着对上下文的更改已经成功保存了一次。)我验证了 backgroundMOC 是在进行更改和提交的同一线程中创建的,这是 NSOperation 的线程。我还查看了 moc insertObjects、updatedObjects 和 deletedObjects 的计数。这些看起来都对。
调用代码如下所示:
- (void) calculateBoundsForSearch {
NSArray *searchesArray = [currentSearchEntity.resultOfSearch allObjects];
MyMKMapBounds bounds = [MapController calculateBoundsForArrayOfSearchResults:searchesArray];
currentSearchEntity.minLatitude = [NSNumber numberWithFloat:bounds.min.latitude];
currentSearchEntity.minLongitude = [NSNumber numberWithFloat:bounds.min.longitude];
currentSearchEntity.maxLatitude = [NSNumber numberWithFloat:bounds.max.latitude];
currentSearchEntity.maxLongitude = [NSNumber numberWithFloat:bounds.max.longitude];
[dataInterface commitBackgroundChangesAndNotify:@"bounds"];
}
这由两个对象调用。一方面,也不例外。
控制台中的唯一输出是:
2012-07-22 10:47:13.790 myApp[46578:17e07] enter commit
Catchpoint 7 (exception thrown).2012-07-22 10:47:21.160 myApp[46578:17e07] exit commit
这是一个非致命的例外。我注意到的一件我不明白的事情是,当它中断时,我必须单击“继续”两次才能通过它。Catchpoint 7 (exception thrown).
第一次单击后会显示该消息。
我试图弄清楚我手头有哪些工具来确定异常的原因。当然,任何有关导致异常的原因的想法也会有所帮助。