2017-09-21 8 views
0

저는 SWIFT 프로그래밍에 익숙하지 않고 핵심 데이터를 사용하고 앱에 표시하기 위해 바인딩하는 간단한 앱을 배우려고합니다. 많은 예제를 살펴 보았지만 모두 오래된 것으로 보입니다. 나는 XCode 9에서 일하고있다.어레이 컨트롤러를 코어 데이터 모델에 어떻게 바인드합니까?

코어 데이터가있는 MacOS 코코아 애플리케이션으로 시작했다. 나는 날짜, 초, 스포츠 및 rpe의 4 가지 속성을 가진 "Workout"이라는 간단한 엔티티를 가지고 있습니다.

그런 다음보기 컨트롤러 장면 아래에 배열 컨트롤러를 추가했습니다. 어레이 컨트롤러를 데이터 소스로 설정 한 테이블보기를 추가했습니다. 배열 컨트롤러에 대한 링크를 추가 및 제거하고 버튼을 추가하여 메소드를 추가하고 제거합니다.

이제해야 할 일은 배열 컨트롤러를 내 핵심 데이터 모델의 managedObjectContext에 바인딩하는 것입니다. AppDelegate에 있습니다. 그러나 배열 컨트롤러를 선택하고 바인딩으로 이동하여 매개 변수를 선택하면 바인딩 할 수있는 유일한 옵션은 "컨트롤러보기"및 "공유 사용자 기본값 컨트롤러"입니다. View Controller를 선택했지만 모델 키 경로를 알아 내 데이터 모델에 연결할 수 없습니다.

나는 분명히 뭔가 빠져 있어야한다고 생각합니다. View Controller의 AppDelegate 또는 Model Key Path에 바인딩 할 방법이 있어야한다고 생각합니다. 그러나 어느 것도 알 수 없습니다. 어떤 도움을 많이 주셨습니다.

답변

1

스토리 보드 기반 프로젝트에서는보기 컨트롤러에서 AppDelegate 클래스로의 (바인딩) 참조가 없습니다. >managedObjectContext -

용액 후 ManagedObjectContextViewController에 결합 속성을 추가 뷰 컨트롤러

@objc let managedObjectContext: NSManagedObjectContext 

required init?(coder: NSCoder) { 
    self.managedObjectContext = (NSApp.delegate as! AppDelegate).persistentContainer.viewContext 
    super.init(coder: coder) 
} 

init?(coder을 대체하는 것이다.

어레이 컨트롤러의 속성 검사기에서 ModeEntity Name으로 설정하는 것을 잊지 말고 엔티티 이름을 삽입하고 Prepares Content을 확인하십시오.

+0

빠른 응답을 주셔서 감사합니다. 내 appDelegate managedObjectContext 매개 변수가없는 것처럼보기 컨트롤러에서 다음 코드를 넣습니다. 필요한 초기화? (코더 : NSCoder) { self.managedObjectContext = (NSApp.delegate as! AppDelegate) .persistentContainer.newBackgroundContext() super. 초기화 (코더 : 코더) }. 그래도 오류가 계속 발생합니다 : [ valueForUndefinedKey :] :이 클래스는 키 managedObjectContext에 대해 키 값 코딩을 준수하지 않습니다. –

+0

나는'NSPersistentContainer' 구문을 고려하여 대답을 업데이트하고 KVC 문제 – vadian

+0

을 고쳐주었습니다. 그 덕분에 .viewContext가 아닌 .newBackgroundContext()를 사용할 때 도움이되었습니다. –

0

바디 언 코드 let managedObjectContext: NSManagedObjectContext@objc let managedObjectContext: NSManagedObjectContext으로 수정하려면 [<Core_Data_Binding.ViewController 0x6080000c4600> valueForUndefinedKey:]: this class is not key value coding-compliant for the key managedObjectContext을 수정하십시오. 기본적으로 XCode 9는 속성 및 메서드를 Objective C에 노출하지 않습니다. The use of Swift 3 @objc inference in Swift 4 mode is deprecated?

+0

에 무엇이 잘못되었는지 검색 한 후 저를 구해 줘서 고마워요. Thats가 실행 중입니다. –