0

핵심 데이터 프로젝트에 문제가 있습니다. NSArrayController NSManagedObjects 및 +/- 단추가 있습니다. 파일을 저장 한 후 행의 객체를 삭제해도 완벽하게 작동하지만 새 객체를 추가하고 즉시 기본값을 변경하지 않고 다시 삭제하면 오류가 발생합니다.핵심 데이터 : 저장되지 않은 개체를 삭제하는 경우 오류가 발생했습니다.

Serious application error. Exception was caught during Core Data change processing: Unknown number type or nil passed to arithmetic function expression. with userInfo (null) 
Unknown number type or nil passed to arithmetic function expression. 

새 개체의 추가를 취소하는 경우에도 마찬가지입니다.

아무에게도 포인터를 줄 수있는 사람이 있습니까? 나는 그것이 임시적인 ID 만 가지고 있다고 생각하지만, 그것을 해결하는 방법은 모른다.

답변

1

문제점 및 해결책을 발견했습니다. 기록을 위해 나는 그것을 설명 할 것이다.

init 함수의 객체 자체가 관찰자를 추가하는 것이 문제였습니다. 이것은 아마도 오류를 유발 한 원인 일 것입니다. 만약 내가 삭제하기 전에 개체를 관찰자로 제거하면 오류가 발생하지 않습니다.

+2

당신은 그 문제에 대해'NSManagedObject' 나'-dealloc' 메소드의'-init ...'메소드를 덮어 쓰지 말아야합니다. 관찰자를 추가 할 필요가 있다면'-awakeFromInsert'와'-awakeFromFetch'에서 관찰자를해야합니다. –

+0

설명서에 따라 "메소드를 무시하는 방법"initWithEntity : insertIntoManagedObjectContext : amd dealloc을 덮어 쓸 수 있습니까? 내가 깨어있는 대신 초기화를 사용하는 이유는 깨어있는 것이 항상 호출자가 아니라는 것을 알기 때문입니다 (사용자가 실행 취소했거나 다른 것 같은 경우). 그러나 나는 틀릴지도 모른다. –

+0

당신은 실행 취소 및 다시 실행에 대해 10.6+에서 awakeFromSnapshotEvent라는 추가 메서드가 있습니다.이 메서드는 실행 취소/다시 실행에서도 호출됩니다. 10.5의 해결 방법으로 작업 관찰을 사용하여 실행 취소 및 다시 실행을 허용하도록 ManagedObjectContext를 변경했습니다. http://github.com/mbrugger/CoreDataDependentProperties/blob/master/LPAutomatedObserving/Classes/LPManagedObjectContext.m –

0

테이블에는 일반적으로 NSManagedObjects가 포함되어 있지 않습니다. 오히려 NSArrayController는 관리 객체의 속성을 바인딩을 통해 값으로 제공하거나 NSTableViewDataSource를 준수하는 객체를 제공합니다. 이 시나리오들 중 하나에서 제공되는 선택된 객체의 삭제는 무수히 많은 방법으로 수행 될 수 있습니다. 문제는 사건을 어떻게 설정했는지 전혀 설명하지 않았다는 것입니다.

삭제가 가능합니까 (버튼에 연결된 대상/액션이 무엇이든간에) 예상치 못한 결과가 발생합니까? float 값이나 다른 임의의 것을 삭제하도록 관리 객체 컨텍스트를 요청한 경우 비슷하게 frighenting 오류가 발생할 수 있습니다 ...

+0

설명에 잠시 유감스럽게 생각해서 죄송합니다. 그것은 당신이 말하는 NSArrayController는 객체를 가지고 있고 NSTableView에 바인드되어 있습니다. 내가 삭제하려고하는 객체가 정확하다는 wheather 체크를 넣으려고했다. 거기에 아무 문제가 없습니다. 또한 오류가 발생하기 전에 잠시 후 (1 개 이상의 런 루프) –

+0

Ssssooooo ..... how * 정확히 * 개체를 삭제 하시겠습니까? 물건이 얼마나 정확하게 묶여 있습니까? 우리가 당신을 도울 수 있도록 도와주세요. –

+0

바인딩은 책을 완전히 뒤 따른다. NSArrayController가 엔티티 모드로 설정되고 개체가 엔티티 이름으로 설정됩니다. 테이블은 바인드 됨. 속성의 열. 나는 문제가 여기 있다고 생각하지 않는다. - 다른 삭제 방법을 시도했습니다. 그것들은 모두 동일한 오류 ([arrayController removeObject : theObject] 및 [managedObjectContext deleteObject : theObject])를 생성하지만, 내가 말했듯이 undo를 누르면 오류가 발생합니다. 그래서 sayin 객체 추가 -> 실행 취소 오류가 생성됩니다. 오류가 실제로 무엇을 의미하는지 알기 원하십니까? –