2014-10-28 79 views
3

我在xcode 6.1上開發併爲iOS 8.1開發。我有一個簡單的項目叫做CoreDataTest我在那裏玩弄核心數據。核心數據實體的初始化方法不可用

型號:

import CoreData 

class Licence: NSManagedObject { 
    @NSManaged var name: String 
} 

enter image description here

現在我想創建一個許可對象。這是之前創建的對象是什麼,我需要:

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

let ent = NSEntityDescription.entityForName("Licence", inManagedObjectContext: context) 

的問題是,Xcode中沒有提供實體正確構造。當我開始打字:

var newLicence = Licence(.. 

我沒有得到任何的自動完成就像這個例子:

enter image description here

我剛剛得到的NSManagedObject()爲自動完成。任何想法什麼是錯的?

+0

對於Xcode 6.1.1,自動完成不顯示,但仍然可以調用init方法(使用實體和受管對象上下文)。 – 2015-03-05 07:23:06

回答

4

通過讀取文檔爲NSManagedObject :)

重要的是,被管理對象的配置是否正確使用 核心數據解決它。如果你直接實例化管理對象,則必須調用 指定的初始化 (initWithEntity:insertIntoManagedObjectContext :)

所以在我的課,我實現:

override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) { 
    super.init(entity: entity, insertIntoManagedObjectContext: context) 
} 

,現在它的工作原理。

+0

這在xcode的最新版本中必須是新的。我已經看到它完成了,而不必這樣做。 (可能在更早的版本中) – 2014-10-31 19:49:12

+1

請注意,它也表示:_You不鼓勵重寫此方法 - 您應該重寫awakeFromInsert和/或awakeFromFetch(如果這些方法有共同的邏輯,則應該將其分解爲第三種方法從兩者中調用)。如果您使用此方法執行自定義初始化,則可能會導致撤消和重做操作出現問題._ – ThomasW 2016-04-28 01:19:33