【发布时间】:2015-02-10 08:45:23
【问题描述】:
我有一个 NSManagedObject。在某些情况下,当我访问块中的对象时,它是否因不同的指针而出错,并且当我访问对象的变量时会出现 EXC_BAD_ACCESS 崩溃。
这是一个简化的代码:
+(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>)
对象的地址好像从 0x7f9fadab1bc0 变成了 0x7f9fad956680。
- 当我在 [doSomethingWith:object] 处设置断点并运行“po 0x7f9fadab1bc0" 我得到与第一个日志条目相同的输出。
- 对象 didTurnIntoFault 在两个日志语句的打印之间没有触发。
- 此方法也在测试中运行,当我单独运行测试时,它通过了。当我将它与 XCTestCase 中的其他 3 个测试一起运行时,它失败了。作为拆解的一部分,销毁核心数据存储。但是,在测试运行期间不会调用此方法(使用断点进行验证)
【问题讨论】:
标签: objective-c core-data objective-c-blocks