iPhone의 Core Data 프로젝트에 문제가 있습니다. 이 시나리오는 사용자가 개체를 추가하기 시작한 다음 프로세스 중에 취소 할 때 발생합니다.managedObjectContext에서 저장되지 않은 개체를 제거하는 방법
사용자가 취소를 클릭하여 개체 목록으로 돌아 가면 더미 개체가 목록에 표시되어 생성 중임을 나타냅니다. 이것은 데이터베이스에 절대로 저장되지 않습니다. 사용자가 저장 버튼을 눌렀을 때 예상대로 저장됩니다. 사용자는 데이터를 추가 뷰 컨트롤러가로드되면
는 I 새로운 것은 객체를 생성 -이 I가 첨가하고 코어 데이터 엔티티이다myThing = NSEntityDescription insertNewObjectForEntityForName @ "myThing" inManagedObjectContext : managedObjectContext];
나는 다음과 같이 내 취소 할 방법이 삭제하려 :
[managedObjectContext DeleteObject 매크로 : myThing]
이렇게하면 취소 할 때 EXC_BAD_ACCESS가 표시됩니다. 디버거에서 코드를 단계별로 살펴보면 취소 메서드를 통해 정상적으로 처리되지만,이 개체는 루트보기 컨트롤러에서 생성됩니다.이 개체는 내 개체를 나열하고이 개체를 만들기 전에 내가 어디에 있었는지 표시합니다.
저는 사용자가 새 객체를 추가 할 수 있도록 허용하지만 부분적으로 취소 할 수 있습니다.
어떤 아이디어가이 오류의 원인입니까? 나는 전형적인 적합하다.
메모리 오류가 일반적인 디버깅에 힘들 수 있습니다. 당신은 정적 분석기를 실행 한 객체에 대한 접근 방식이 취소이 불행하게도 :(
전 취소라고 확신합니다. 내가 구원을한다면, 모든 것이 올바르게 작동합니다. [... deleteObject : myThing]을 제거하면; cancel 메소드에서 충돌이 더 이상 발생하지 않습니다. RootController가 전달한 컨텍스트 대신이 컨트롤러에서 다른 관리 컨텍스트를 사용하는 것이 합리적입니까? – Anonymouslemming
흠 - 내 이전 의견을 무시하십시오. cancel 메서드에서 myThing = nil을 설정하면이 문제를 해결할 수 있습니다. dealloc 메소드에서 [myThing release]를 수행하고 있었지만 이것을 nil로 설정하면 문제가 해결되었습니다. 감사합니다. – Anonymouslemming