1

핵심 데이터를 사용하고 있습니다. 내 응용 프로그램의 몇 가지 이벤트에서 관리되는 개체를 업데이트하려고합니다. 해당 관리 객체는 앱 실행시 생성되거나 가져옵니다 (있는 경우). 관리되는 객체가 스레드로부터 안전하지 않으므로 관리되는 객체를 메모리에 저장하지 않고 대신 스레드 안전을 위해 objectID을 저장하고 있습니다. 개체가 생성되어 컨텍스트에 저장되면 objectID을 저장하므로 저장된 objectID는 영구적이며 일시적이 아닙니다. 내가 다음 코드 한 내 개체를 업데이트 할 이벤트에objectWithID를 사용하여 managedObject를 nil로 가져 오는 중

:

self.managedObjectContext.performBlock { 
    let myObject = self.managedObjectContext.objectWithID(objectId) as! MyClass 
    myObject.property = myValue 
    self.managedObjectContext.save() 
} 

이 대부분의 시간을 잘 작동하지만 내가 self.managedObjectContext.objectWithID(objectId)를 사용하여 객체를 얻고 경우가 있지만, 모든 것이 특성이다 객체가 이미 생성되어 컨텍스트에 저장 되었기 때문에 발생하지 않아야합니다.

일부 속성 값이없는 개체를 가져 오는 이유를 지적 할 수 있습니까?

내가 알고있는 유일한 이유는 임시 objectID를 사용하여 objectWithID 메서드를 호출하는 것이지만 영구 objectID 만 사용하고 있기 때문에 필자의 경우에는 그렇지 않습니다.

답변

0

가장 최근에 액세스하기 전에 개체가 삭제되었음을 의미하는 모든 값에 대해 nil이 반환되는 경우

WWDC 2015에서 핵심 데이터 비디오를보십시오.이 동작은 삭제 된 NSManagedObject에 대한 참조를 보유 할 때 발생하는 문제를 방지하기 위해 도입되었습니다.