2014-10-03 58 views
2

當我使用核心數據來定義我的模型時,我遇到了一些困難。核心數據替代

1.無法即時創建對象。

我希望能夠創建一個像下面這樣的對象,並繼續爲其屬性添加值。

let action = Action() 
action.desc = "hello" 

但是,如果你正在使用的核心數據模型類,你不能這樣做,因爲你會得到無法呼籲NSManagedObject類指定初始化錯誤。您必須使用initWithEntity:insertIntoManagedObjectContext:和全部創建一個新對象。

2.不能將類類型用作函數中的返回類型。

當使用核心數據時,我保留一個單獨的文件來放置所有的抓取/保存方法。其中,我有一種方法用於將所有Action對象作爲數組檢索。

public func loadActions() -> [Action] { 
    let fetchRequest = NSFetchRequest() 
    let entityDescription = NSEntityDescription.entityForName("Action", inManagedObjectContext: managedObjectContext!) 
    fetchRequest.entity = entityDescription 

    var error: NSError? 
    let result = managedObjectContext?.executeFetchRequest(fetchRequest, error: &error) 

    return result! 
} 

我不能使用類型Action創建一個類型數組,因爲我得到的錯誤方法不能被聲明爲public,因爲它的結果是採用內部類。所以我必須將數組作爲AnyObject s的數組,然後在需要使用它們時將它們轉換爲Action

3.班內不能有方法。

我知道你可以在Objective-C中創建類別,並將其中的所有方法。我猜Swift中的等價物是擴展(?)。但如果你能在同一個地方完成課程和方法,那將會很好。

假設我採用OO道路,並以正常方式創建我的整個模型,這帶來了我的問題。如何以及在哪裏可以保存這些對象?

回答

0

這不是一個真正的答案,但我不認爲第2點和第3點是有效的?

  1. 不要公開你的方法 - 這裏的問題與核心數據無關,它與Swift的訪問級別有關。您無法制作公開方法loadActions,該方法返回內部類型Action。您必須公開Action,或者使方法內部公開(或刪除public

  2. 您可以在類中使用這些方法 - 只需將它們寫在那裏?即使你需要使用擴展名,你仍然可以把它放在同一個文件中?

PS如果你確實找到了一個很好的Swift替代品,請告訴我。我正在尋找一個 - 這就是我首先發現你的問題!