iOS Core Data 保存上下文错误

Posted

技术标签:

【中文标题】iOS Core Data 保存上下文错误【英文标题】:iOS Core Data save context error 【发布时间】:2014-11-22 18:27:33 【问题描述】:

我正在尝试使用 Core Data 将数据插入数据库:

+ (BOOL)insertQuestionnaireObject:(Questionnaire *)questionnaireObject withError:(NSError **)error

    __block BOOL result = NO;

    [self.managedObjectContext performBlockAndWait:^

        Questionnaire *questionnaireManagedObject = [self entityToInsertWithName:@"Questionnaire"];

        if (questionnaireManagedObject)
        
            [self prepareForInsertQuestionnaireManagedObject:questionnaireManagedObject withQuestionnaireObject:questionnaireObject];

            result = [self saveContextWithError:error];
        
    ];

    return result;

我正在保存上下文:

+ (BOOL)saveContextWithError:(NSError **)error

    BOOL result = YES;

    if (![self.managedObjectContext save:error])
    
        result = NO;
    

    return result;

Insert 方法乍一看工作正常。关于保存上下文方法,我不能说同样的话。它在if (![self.managedObjectContext save:error]) 行中循环(为什么它应该?)并退出而没有转到return result; 行,因为我们的崩溃或返回错误。但它将 2x 个对象保存到数据库而不是 1 个。这些事情从 ios 8 和方法 performBlockAndWaitusage 开始发生。我该如何解决?

【问题讨论】:

【参考方案1】:

可能是因为您试图通过在类方法中调用self.managedObjectContext 来访问实例变量。尝试将类方法变成实例方法,或者将self.managedObjectContext 作为参数传递给类方法。

【讨论】:

以上是关于iOS Core Data 保存上下文错误的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 Core Data - 如何同步保存上下文?

iOS:Core Data Merge 策略如何影响 NSManagedObjectContext 保存和刷新操作

ios/xcode/core data:更新屏幕的最佳方式

使用Core Data将文本从文本字段分配到托管对象上下文

Core Data 后台处理,保存不推送到主上下文

即使在 Core Data 上下文保存后数据也没有保留