1

此代码因非致命异常而中断,但未提供重要的错误信息。这是在更新核心数据实体之后。

-(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).第一次单击后会显示该消息。

我试图弄清楚我手头有哪些工具来确定异常的原因。当然,任何有关导致异常的原因的想法也会有所帮助。

4

0 回答 0