Objective c NSManagedObject更改块中的引用

Objective c NSManagedObject更改块中的引用,objective-c,core-data,objective-c-blocks,Objective C,Core Data,Objective C Blocks,我有一个主题。在某些情况下,当我访问块中的对象时,它是否因不同的指针而出现故障,并且当我访问对象的变量时,会出现EXC_BAD_访问崩溃 下面是一个简化的代码: +(void)updateObject:(NSManagedObject *)object{ NSLog(@"Object %@", object); [self requestUpdateFromDict:currentDict succes:^(NSURLSessionDa

我有一个主题。在某些情况下,当我访问块中的对象时,它是否因不同的指针而出现故障,并且当我访问对象的变量时,会出现EXC_BAD_访问崩溃

下面是一个简化的代码:

+(void)updateObject:(NSManagedObject *)object{
        NSLog(@"Object %@", object);

[self requestUpdateFromDict:currentDict
                     succes:^(NSURLSessionDataTask *task, id responseObject)
    {
       NSLog(@"Object %@", object);
       [doSomethingWith:object]
    }];
}
例如,输出为:

Object <TestObject: 0x7f9fadab1bc0> (entity: TestObject; id: 0xd000000000040004 <x-coredata://5F27CBB5-800D-44B8-BB4B-99A0DE6962E4/TestObject/p1> ; data: {
    floatVar = "2.14";
    "int_32Var" = 99;
    "resource_uri" = "/test";
    stringVar = "Just resting.";
})
Object <TestObject: 0x7f9fad956680> (entity: <null>; id: 0xd000000000040002 <x-coredata://C9D50E1B-46E9-4C11-96BE-622281232D5B/TestObject/p1> ; data: <fault>)
对象(实体:TestObject;id:0xd000000000040004;数据:{
floatVar=“2.14”;
“int_32Var”=99;
“资源uri”=“/test”;
stringVar=“正在休息。”;
})
对象(实体:;id:0xd000000000040002;数据:)
对象的地址似乎已从0x7f9fadab1bc0更改为0x7f9fad956680

  • 当我在[doSomethingWith:object]上放置一个断点并运行“po”时 0x7f9fadab1bc0“我得到与第一个日志条目相同的输出
  • 在打印两条日志语句之间,没有触发对象didTurnIntoFault
  • 这个方法也在测试中运行,当我单独运行测试时,它通过了。当我在XCTestCase中与其他3个测试一起运行时,它失败了。作为拆卸的一部分,销毁核心数据存储。但是,在测试运行期间不会调用此方法(使用断点验证)

更改日志记录样式。两个日志的消息类型相同。 updateObject的第二个方法可能是从代码中的其他位置调用的。另外,在使用NSManagedContext时最好设置某种类型的锁