2015-02-10 66 views
0

我有一個NSManagedObject。在某些情況下,當我訪問塊中的對象時,它會使用不同的指針發生故障,並且在訪問對象的變量時出現EXC_BAD_ACCESS崩潰。NSManagedObject更改塊的參考

下面是一個簡化的代碼:

+(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:對象]一個破發點並運行「寶 0x7f9fadab1bc0」我得到的輸出作爲第一個日誌條目相同。
  • 對象didTurnIntoFault在兩個日誌語句的打印之間未觸發。
  • 此方法也在測試中運行,當我單獨運行測試時,它會通過。當我在XCTestCase中與其他3個測試一起運行時,它會失敗。作爲拆除Core Data數據存儲的一部分。但是在測試運行期間不會調用此方法(通過斷點驗證)

回答

0

更改日誌記錄樣式。這兩種日誌都有相同的消息。 可能有第二種方法的updateObject可能是從代碼中的其他地方調用的。當你使用NSManagedContext時,最好還是放一些鎖。