首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >读取属性时Xcode7 ConcurrencyDebug并发冲突?

读取属性时Xcode7 ConcurrencyDebug并发冲突?
EN

Stack Overflow用户
提问于 2015-11-05 21:30:01
回答 1查看 38关注 0票数 0

在Xcode7中,打开-com.apple.CoreData.ConcurrencyDebug开关后,即使只读取属性,也会发生多线程冲突。这是预期的行为吗?

代码语言:javascript
运行
复制
-(NSManagedObjectContext *)newPrivateManagedObjectContext
{
    NSManagedObjectContext *newContext = 
    [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType>];
    [newContext setParentContext:<some shared MOC with NSMainQueueConcurrencyType];

    return newContext;
}

-(void)someMethod 
{
    NSManagedObjectContext *context = [self newPrivateContext];
    NSManagedObject *mo = [context objectWithID:objectID]; // concurrency voilation
    // assuming the above worked you would still get
    if (mo.someProperty == nil) // also a concurrency violation 
    {
    }
}

目前,Xcode似乎期望我们在一个NSManagedObjectContext块中编写与performBlock*的每一个交互。也许我漏掉了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-05 21:36:25

这是意料之中的。您使用的是NSPrivateQueueConcurrencyType,这意味着您的必须在每次执行使用上下文的操作时都使用performBlock:performBlockAndWait: 。这包括对上下文的任何方法调用(例如,对objectWithID:的调用)。它还包括对上下文管理的任何其他对象的任何调用--例如查找从上下文获取的对象上的属性值。

简而言之:这正是应该发生的事情,因为您没有正确地使用托管对象上下文。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33555147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档