기본적으로 나는 NSManagedObjectContext
에서 삭제 한 후 컨텍스트를 저장 한 후 a의 일부 속성에 액세스하려고합니다. 문제는 컨텍스트를 저장 한 후 개체 데이터를 오류로 표시하고 분명히 복구 할 수 없다는 것입니다.관리 대상 개체 삭제 후 코어 데이터 오류
문제를 재현하기 위해 샘플 프로젝트를 만들었습니다. here을 다운로드 할 수 있습니다.
City *city = [self.cities objectAtIndex:indexPath.row];
[self.managedObjectContext deleteObject:city];
if (![self.managedObjectContext save:&error]) {
[self.managedObjectContext rollback];
NSLog(@"Error: %@", error);
}else{
NSLog(@"%@", city);
// All properties of "city" are zeroed.
// Saved. Update data sources and animate changes...
}
가 생산 :, 다음 코드 설명하기 위해
<City: 0x7fe1cbd3cba0> (entity: City; id: 0xd000000000040004 <x-coredata://C1E3D3D8-188D-41DE-B701-08AF6D3E8860/City/p1> ; data: {
country = "0xd000000000080002 <x-coredata://C1E3D3D8-188D-41DE-B701-08AF6D3E8860/Country/p2>";
name = Rosario;
})
<City: 0x7fe1cbd3cba0> (entity: City; id: 0xd000000000040004 <x-coredata://C1E3D3D8-188D-41DE-B701-08AF6D3E8860/City/p1> ; data: <fault>)
내가 그것을 삭제 한 후, 관리되는 개체에 액세스하고 싶은 이유, 데이터 소스 역할을하는 NSMutableArray
를 업데이트하는 것입니다 테이블 뷰를 생성하고 네비게이션 컨트롤러 스택의 이전 컨트롤러에서 다른 데이터 소스를 업데이트합니다 (샘플 프로젝트에서는 구현되지 않음).
최대 포장, 내 질문은 없습니다 :
의 NSManagedObjectContext
에서 NSManagedObject
을 삭제하고 컨텍스트를 저장 한 후, 더 이상 관리되는 개체의 데이터가 액세스 할 수 있음을 보장 더있다? 해당 관리 객체에 대한 참조가 유지되는 경우에도?
조사한 내용을 토대로 핵심 데이터는 컨텍스트가 저장되면 메모리를 절약하기 위해 엔티티 데이터를 제거합니다. 이 가정이 맞습니까? 이 데이터 오류의 원인이 될 수있는 다른 요인이 있습니까?
감사합니다.
컨텍스트를 저장 한 후 삭제 된 개체에 액세스 할 수 있다고 생각하는 이유가 무엇입니까? 데이터 소스에는'NSFetchedResultsController'를 사용하십시오. – Avi
삭제 된 개체에 대한 참조는 사용하지 않아야합니다. – Andy
@Avi 나는 관리 대상에 대한 참조를 유지했기 때문에. – Mateus