2016-07-12 27 views
0

我有一個應用程序,其中已具有工作核心數據和持久性存儲功能。我想在這個應用程序中使用DATAStack,但我無法使它工作。帶有工作核心數據的現有應用程序中的DATAStack庫

沒有DATAStack我有這些標準的核心數據lazy var s在我的AppDelegate。在我的ViewController中,我檢索到managedObjectContext,如下所示:let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext。將moc變量傳遞給需要處理存儲的函數,並將其稱爲moc.save()。我知道這是有效的,因爲我還檢索並顯示屏幕上存儲的條目,這也可以在完全關閉應用程序後生效。我用sqlite數據庫查看器(SQLPro for SQLite Read-Only)檢查sqlite數據庫。

現在用DATAStack,我在我的AppDelegate中添加了一個新行:lazy var dataStack: DATAStack = DATAStack(modelName: "Database")。我的數據庫模型的名字確實是Database.xcdatamodeld,所以初始化應該是正確的。在我的ViewController中,我用let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).dataStack.mainContext替換了上述var moc = ...。這個moc變量再次被傳遞,我把moc.save()稱爲moc.save(),但現在它不存儲任何東西。正如我所描述的那樣,唯一改變的是管理對象上下文的來源。

我必須錯過這個圖書館的東西,但我不知道我錯過了什麼。

我也看過一個Sync exampleSync使用DATAStack),但dataStack對象檢索以完全不同的方式。

回答

0

顯然你不應該使用mainContext保存,但總是一個新的背景。所以獲得正確的moc的唯一方法是這樣的:

dataStack.performInNewBackgroundContext() { moc in 
    //Do things with moc and call moc.save() somewhere 
} 
相關問題