【问题标题】:Getting "NSObjectInaccessibleException" error when updating an nsmanagedobject in secondary thread在辅助线程中更新 nsmanagedobject 时出现“NSObjectInaccessibleException”错误
【发布时间】:2013-09-20 16:29:07
【问题描述】:

在我正在开发的应用程序中,我需要使用这些对象的服务器版本发生的任何更改来更新我在本地存储的对象。为了执行更新检查,我使用自己的 NSManagedObjectContext 分配一个 NSOperation 子类,并在将这些更新合并回主 NSManageObjectContext 之前解析我从服务器接收到的任何更新。

我遇到的问题是,当我在 UI 中显示一个 NSManagedObject,然后通过辅助 NSManagedObjectContext 进行更新时,应用程序崩溃并显示:

'NSObjectInaccessibleException',原因:'CoreData 无法满足...异常的错误

当更新完成并且应用程序未在 UI 中显示 NSManagedObject 时,我没有遇到此问题

这是用于创建 NSOperation 的本地 NSManagedObjectContext 的方法:

- (NSManagedObjectContext *) localManagedObjectContext
{

    if (!_localManagedObjectContext)
    {
        _localManagedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType];
        [_localManagedObjectContext setParentContext:[CDAServiceManager managedObjectContext]];

        [_localManagedObjectContext setUndoManager:nil];
        [_localManagedObjectContext setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];

    }

    return _localManagedObjectContext;

}

是否有从辅助 NSManagedObjectContext 更新当前正在使用的 NSManagedObject 的策略?

【问题讨论】:

    标签: ios core-data nsmanagedobject nsmanagedobjectcontext nsoperation


    【解决方案1】:

    在你的 MO 上调用 refresh 以显示更改

    [ctx refreshObject:object mergeChanges:mergeChanges /*YES OR NO*/];
    

    【讨论】:

    • “ctx”是我的主要 NSManagedObjectContext 吗?如果是这样,我将如何检测到我的主线程中的对象已更改?
    • 获取 UI,进行 bg 处理,在 UI 中刷新
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多