我有已經發布的使用核心數據的應用程序。
現在我想添加對手錶套件和今天擴展的支持。核心數據將數據移入共享容器
我需要的核心數據移動到共享的容器,但未保存的數據就會丟失以前的用戶,我怎麼能做到這一點的最好方法是什麼?
我有已經發布的使用核心數據的應用程序。
現在我想添加對手錶套件和今天擴展的支持。核心數據將數據移入共享容器
我需要的核心數據移動到共享的容器,但未保存的數據就會丟失以前的用戶,我怎麼能做到這一點的最好方法是什麼?
可以遷移核心數據堆棧。 A fuller answer can be found here,但短期的版本是:
migratePersistentStore:toURL:options:withType:error:
將其移至新位置。然後刪除舊的副本。(與Stephen's回答的問題是,它假設核心數據堆棧是一個單一的SQLite文件,它並不總是正確的。)
這裏是我移動的核心數據,在我的應用程序共享的容器。我在應用啓動時執行此操作。
NSUserDefaults* sharedDefs = [GPMapCore sharedCore].sharedUserDefaults;
if (![sharedDefs boolForKey:@"CoreDataMovedToExtension"])
{
NSURL* oldLocation = GET_LOCATION_OF_CORE_DATA_SQLITE_FILE();
NSURL* newLocation = GET_LOCATON_TO_MOVE_THE_SQLITE_FILE_TO();
if ([[NSFileManager defaultManager] fileExistsAtPath:[oldLocation filePathString]])
{
//Check if a new file exists. This can happen when the watch app is run before
//Topo Maps+ runs and move the core data database
if ([[NSFileManager defaultManager] fileExistsAtPath:[newLocation filePathString]])
{
[[NSFileManager defaultManager ] removeItemAtURL:newLocation error:nil];
}
[[NSFileManager defaultManager] moveItemAtURL:oldLocation toURL:newLocation error:nil];
}
[sharedDefs setBool:YES forKey:@"CoreDataMovedToExtension"];
[sharedDefs synchronize];
}
是在移動選項不夠還是我們真的需要migratePersistentStore:的toURL :options:withType:error: –
這個舉動對我來說很奏效,雖然你可能會更好的移民 –
Thaks,那答案更完整...... –