2017-09-21 64 views
0

我是SWIFT編程新手,想要做一個簡單的應用來學習如何使用核心數據並將其綁定到應用中。我已經看過大量的例子,但都看起來很老了。我在XCode 9工作。如何將我的陣列控制器綁定到我的核心數據模型?

我開始使用Core Data的MacOS Cocoa應用程序。我有一個名爲「Workout」的簡單實體,包含4個屬性date,seconds,sport和rpe。

然後我在視圖控制器場景下添加了一個數組控制器。我添加了一個將數組控制器設置爲數據源的表視圖。我添加了按鈕來添加和刪除鏈接到陣列控制器添加和刪除方法。

我想我現在需要做的就是將數組控制器綁定到我的核心數據模型的managedObjectContext。這可以在AppDelegate中找到。但是,當我選擇陣列控制器並轉到綁定並選擇參數時,唯一要綁定的選項是「視圖控制器」和「共享用戶默認控制器」。我選擇了視圖控制器,但無法找出模型關鍵路徑來鏈接到我的數據模型。

我覺得我必須錯過一些明顯的東西。我覺得必須有一種方法來綁定到AppDelegate或從視圖控制器的模型關鍵路徑,但我無法弄清楚。任何幫助非常感謝。

回答

1

在基於故事板的項目中,從視圖控制器到AppDelegate類沒有(綁定)引用。

一個解決辦法是增加一個屬性,並在視圖控制器

@objc let managedObjectContext: NSManagedObjectContext 

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

重寫init?(coder然後結合到ManagedObjectContextViewController - >managedObjectContext

在陣列控制器的屬性督察不要忘記設置ModeEntity Name,插入實體名稱,並檢查Prepares Content

+0

感謝您的快速響應。我把下面的代碼放在視圖控制器中,因爲我的AppDelegate沒有managedObjectContext參數:required init?(coder:NSCoder){self.managedObjectContext =(NSApp.delegate as!AppDelegate).persistentContainer.newBackgroundContext() super。 init(編碼器:編碼器) }。仍然收到錯誤:[ valueForUndefinedKey:]:此類不是關鍵字managedObjectContext的編碼兼容的值。 –

+0

我更新了答案,以考慮「NSPersistentContainer」語法並修復KVC問題 – vadian

+0

謝謝。多數民衆贊成在幫助我,因爲我使用.newBackgroundContext(),而不是.viewContext –

0

修復[<Core_Data_Binding.ViewController 0x6080000c4600> valueForUndefinedKey:]: this class is not key value coding-compliant for the key managedObjectContext將vadian代碼中的let managedObjectContext: NSManagedObjectContext更改爲@objc let managedObjectContext: NSManagedObjectContext。 XCode 9默認情況下不會將屬性和方法暴露給Objective C: The use of Swift 3 @objc inference in Swift 4 mode is deprecated?

+0

謝謝你的錯了幾天。這讓它運行。 –

相關問題