2011-02-25 26 views
1

我在iPhone應用程序中使用核心數據。當我在模擬器中使用它時工作正常,但是當我將它部署到設備時,我的應用程序找不到我的Core Data存儲的值。如果我在iPhone上插入一個值,它會在Core Data中找到值。核心數據:永久存儲區在Xcode中工作,但不在設備上

我需要保留核心數據的價值,同時部署到iPhone。

如果有人知道如何做到這一點,請幫助我。

+0

如果你給我們一些東西繼續,你更有可能得到一個有用的答案。諸如「我正在嘗試執行X,我的代碼看起來像Y,在我期望它執行A的設備上,但是它做了B.我的控制檯輸出說'C'。」 – occulus 2011-02-25 15:13:09

+0

另外:http://msmvps.com/blogs/jon_skeet/archive/2010/08/29/writing-the-perfect-question.aspx – occulus 2011-02-25 15:18:32

+0

OP的作者顯然不是本地語言的英語人。我相信他問爲什麼一個先前存在的持久存儲在Xcode中工作正常,但在設備上失敗。 – TechZen 2011-02-25 17:29:43

回答

1

這是很容易...

  • 準備CoreData數據庫文件
  • 命名,InitialData.sqlite例如
  • 將它添加到您的應用程序包

...並在NSPersistentStoreCreation分配&初始化之前添加類似於此的內容。

NSString *storePath = ... your store path for persistent store coordinator ...; 

NSFileManager *fileManager = [NSFileManager defaultManager]; 
if (![fileManager fileExistsAtPath:storePath]) { 
    NSString *initialStorePath = [[NSBundle mainBundle] pathForResource:@"InitialData" ofType:@"sqlite"]; 
    if (defaultStorePath) { 
    [fileManager copyItemAtPath:initialStorePath toPath:storePath error:NULL]; 
    } 
} 

我假設您想要將一些默認數據複製到您的應用程序。這就是我可以從你的問題中推斷出來的 - 你真正想要的東西還不清楚。

+0

'defaultStorePath'沒有聲明,你的意思是'initialStorePath'? – Stunner 2011-05-19 07:04:58

2

包含設備上的應用程序安裝在內的所有文件都必須位於不可更改的應用程序包中,該應用程序包使文件只讀。

如果您在應用程序中包含Core Data持久性存儲文件,它駐留在應用程序包內,並且只能作爲只讀存儲添加到持久存儲協調器中。任何嘗試寫入它都會產生錯誤。

您通常需要一個讀寫存儲器,因此解決方案是使用標準文件操作將包含的持久存儲文件從應用程序包複製到應用程序的文檔或庫文件夾中。當應用程序啓動時,應用程序委託會在初始化Core Data堆棧之前檢查存儲的存在,如果它尚未這樣做,則複製它。

您還有更高級的選項可以爲一個堆棧使用兩個存儲區,一個只讀和另一個讀取。但是,該方法將複雜性引入數據模型中,通常不需要。

相關問題