2010-02-14 4 views
2

iPhone의 Core Data 프로젝트에 문제가 있습니다. 이 시나리오는 사용자가 개체를 추가하기 시작한 다음 프로세스 중에 취소 할 때 발생합니다.managedObjectContext에서 저장되지 않은 개체를 제거하는 방법

사용자가 취소를 클릭하여 개체 목록으로 돌아 가면 더미 개체가 목록에 표시되어 생성 중임을 나타냅니다. 이것은 데이터베이스에 절대로 저장되지 않습니다. 사용자가 저장 버튼을 눌렀을 때 예상대로 저장됩니다. 사용자는 데이터를 추가 뷰 컨트롤러가로드되면

는 I 새로운 것은 객체를 생성 -이 I가 첨가하고 코어 데이터 엔티티이다

myThing = NSEntityDescription insertNewObjectForEntityForName @ "myThing" inManagedObjectContext : managedObjectContext];

나는 다음과 같이 내 취소 할 방법이 삭제하려 :

[managedObjectContext DeleteObject 매크로 : myThing]

이렇게하면 취소 할 때 EXC_BAD_ACCESS가 표시됩니다. 디버거에서 코드를 단계별로 살펴보면 취소 메서드를 통해 정상적으로 처리되지만,이 개체는 루트보기 컨트롤러에서 생성됩니다.이 개체는 내 개체를 나열하고이 개체를 만들기 전에 내가 어디에 있었는지 표시합니다.

저는 사용자가 새 객체를 추가 할 수 있도록 허용하지만 부분적으로 취소 할 수 있습니다.

어떤 아이디어가이 오류의 원인입니까? 나는 전형적인 적합하다.

메모리 오류가 일반적인 디버깅에 힘들 수 있습니다. 당신은 정적 분석기를 실행 한 객체에 대한 접근 방식이 취소이 불행하게도 :(

답변

2

에서 스택 추적을 생성 할 수 없습니다입니까? 당신은 문맥을 삭제 한 후 전무로 "myThing"참조를 설정할 수 있습니다.

당신이 그것을 인 메모리 오류로 선도하고 워크 플로우를 취소 할 것을 확실히 알고 있습니까?

+0

전 취소라고 확신합니다. 내가 구원을한다면, 모든 것이 올바르게 작동합니다. [... deleteObject : myThing]을 제거하면; cancel 메소드에서 충돌이 더 이상 발생하지 않습니다. RootController가 전달한 컨텍스트 대신이 컨트롤러에서 다른 관리 컨텍스트를 사용하는 것이 합리적입니까? – Anonymouslemming

+0

흠 - 내 이전 의견을 무시하십시오. cancel 메서드에서 myThing = nil을 설정하면이 문제를 해결할 수 있습니다. dealloc 메소드에서 [myThing release]를 수행하고 있었지만 이것을 nil로 설정하면 문제가 해결되었습니다. 감사합니다. – Anonymouslemming

0

를 또한 설정할 수 있습니다 NSZombie에서 어떤 객체가 액세스되고 있는지 확인하십시오. 그러면이 문제를 신속하게 추적하는 데 도움이됩니다. . 사용 방법에 대한 몇 가지 예는 Google NSZombie를 참조하십시오.

관련 문제