此代码违反了非致命异常,但未提供重要的错误信息。这是在核心数据实体更新之后。
-(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 insertedObjects,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).
。
我正在试图找出我手头有哪些工具来确定异常的原因。当然,任何导致异常的想法都会有所帮助。