0

새로운 앱을 만들고있어 신속하게 개발하려고 노력했습니다. CoreData를 사용하고 있으며 이상한 동작이 예상됩니다.swift NSManagedObject 하위 클래스 초기화 문제

나는이 같은 새로운 항목 (NSManagedObject 하위 클래스)를 만드는거야 : 나는의 startDate를 인쇄 할 때

let managedObjectContext: NSManagedObjectContext = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext! 

    self.newItem = NSEntityDescription.insertNewObjectForEntityForName("Item", inManagedObjectContext: managedObjectContext) as Item 

    self.newItem.setValue(NSDate(), forKey: "startDate") 

, 그것은 항상 전무하다. 아이템의 속성 (다른 객체에 대한 링크)과 동일합니다.

디버거에서 객체 (newItem)가 인스턴스화가 잘된 것 같습니다 (객체 유형으로 (myapp.Item!)이 표시됨).하지만 실제로 디버거가 CoreData와 친숙하지 않은 것 같습니다. objectiveC의 경우와 같이 모든 객체의 속성을 검사하거나 인쇄 할 수있는 방법이 없습니다.

여기에 누락 된 것이 있습니까? 본격적으로 나에게 맞는 것은 아닌 것 같은데?

감사합니다.

답변

2

디버거에서 개체 유형을 확인한다고해서 개체가 올바르게 초기화되지는 않습니다. self.newItem을 정의 할 때 클래스에서 선언 한 유형이 표시됩니다.

동의합니다. 스위프트 디버거가 많이 필요합니다. 고급 디버거 명령을 배우고 싶지 않으면이 상황을 디버깅 할 수는 없지만 대신 코드에 로그 문을 삽입하는 것만으로도 입력 할 수 있습니다.

확인 및

  • 관리되는 개체 컨텍스트가 nilnil
  • Item 엔티티에 대한 관리 객체의 서브 클래스가 제대로 삽입 방법은 참이 아닌 적절한 Item 객체를 생성
  • 됩니다
  • 아니라고 확인 구성된

아마도 새로운 로컬 0을 만들려고 할 수 있습니다.변수를 self.newItem에 할당하여 ivar 오류를 제거하십시오.

컨텍스트를 저장하면 변경 사항이 있는지 확인하십시오.

오류가 발생하기 쉬운 valueForKey 메서드가 아닌 newItem.startDate과 같은 하위 클래스 속성을 사용하여 특성에 액세스하는 데 익숙해 지도록하십시오.

+0

답장을 보내 주셔서 감사합니다. 실제로 그것은 조금 더 이상합니다. iVar 값을 인쇄 할 때 (디버거에서 po를 사용), 설정 한 직후에 모두 0이됩니다. 그러나 몇 초 후에, 그들은 채워진 것 같습니다. 정말 이상해. 컴파일러/디버거 문제로 인한 신속한/CoreData 동작입니까? – Khal

+0

'printf' 또는'NSLog'를 사용하여 변수 내용을 확인하십시오. – Mundi

관련 문제