具有可选属性的实体在雪豹中崩溃

Posted

技术标签:

【中文标题】具有可选属性的实体在雪豹中崩溃【英文标题】:Entity with optional attribute crashes in Snow Leopard 【发布时间】:2013-04-16 08:50:49 【问题描述】:

好的,所以我的问题很简单。我需要我的属性之一是可选的。在 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];

【问题讨论】:

【参考方案1】:

知道了!

Snow Leopard 希望 NSManagedObjectContext 的保存发生在主线程上

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

现在它可以工作了!

让我感到困惑的是,如果所有属性都被指定为强制属性,那么即使在 10.6 上,它也可以在不运行在主线程上的情况下工作得很好。哦,好吧……

【讨论】:

以上是关于具有可选属性的实体在雪豹中崩溃的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MacOS X 雪豹 (10.6) 上部署 Qt 5.5 C++11 应用程序

在雪豹上安装mysqldb

在雪豹中安装 mysql 失败

在雪豹上安装 Qt 失败

Rails、MySQL 和雪豹

Imagemagick、雪豹和 PDF 转换