1

好的,所以我的问题很简单。我需要我的属性之一是可选的。在 10.7 和 10.8 下它很好,但在雪豹下它会崩溃。当我取消选中“可选”时,它不再崩溃,但现在保存会导致错误并且不会发生。

这就是我设置托管对象上下文的方式:

self.notesPersistentStore = [self.notesStoreCoordinator
                              addPersistentStoreWithType:NSSQLiteStoreType
                              configuration:nil
                              URL:self.notesStoreUrl
                              options:nil
                              error:nil];

_notesContext = [[NSManagedObjectContext alloc] init];
_notesContext.mergePolicy = NSMergeByPropertyStoreTrumpMergePolicy;
[_notesContext setPersistentStoreCoordinator:self.notesStoreCoordinator];
[[NSNotificationCenter defaultCenter] addObserver:self
                                       selector:@selector(notesContextChanged:)
                                       name:NSManagedObjectContextObjectsDidChangeNotification
                                       object:self.notesContext];

这是它崩溃的部分:

- (void)notesContextChanged:(NSNotification *)notification_
{
    [self.notesContext save:nil];
}
4

1 回答 1

1

知道了!

雪豹希望 NSManagedObjectContext 的保存发生在主线程上

dispatch_async(dispatch_get_main_queue(), ^{
    NSError *error;
    [self.notesContext save:&error];
    [Utils handleError:error];
});

现在它起作用了!

让我感到困惑的是,如果所有属性都被指定为强制属性,那么即使在 10.6 上也不在主线程上运行,它也能很好地工作。那好吧...

于 2013-04-16T12:10:54.490 回答