2015-01-17 115 views
1

我一直在閱讀大量的CoreData + iCloud並瞭解它的任何內容,但很直接。但是,我很早就陷入了困境,並且很好奇你是否有任何想法。CoreData + iCloud在iOS8中使用Xcode6和Swift

我的工作臺: Xcode6.1.1,斯威夫特,CoreData添加了iCloud的權利(在iOS8.1模擬器測試,以及iOS8.1設備)

看到自己,簡單地開始了新的「辛格在Xcode中查看應用程序「項目,勾選」使用核心數據「複選框。要啓用的iCloud,我調用coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration:URL:options:error:)

我還添加了觀察員NSPersistentStoreCoordinatorStoresWillChangeNotificationNSPersistentStoreCoordinatorStoresDidChangeNotification,並且NSPersistentStoreDidImportUbiquitousContentChangesNotification前加入

let storeOptions = [ 
    NSPersistentStoreUbiquitousContentNameKey: "iCloudTest" 
] 

當我運行應用程序的第一次,我的控制檯輸出看起來是這樣的:

storesDidChange: NSConcreteNotification 0x15d6b890 {name = NSPersistentStoreCoordinatorStoresDidChangeNotification; object = <NSPersistentStoreCoordinator: 0x15e96380>; userInfo = { 
added =  (
    "<NSSQLCore: 0x15e9a1b0> (URL: file:///var/mobile/Containers/Data/Application/F2E684E6-6B7B-4429-B9CD-24C45DE18D27/Documents/CoreDataUbiquitySupport/mobile~BB56F5F3-5448-41A3-A142-921D99A85855/iCloudTest/1660860A-83E1-4906-BEB8-DAF02DAC62B0/store/iCloudTest.sqlite)" 
    ); 
}} 
2015-01-16 22:17:51.367 iCloudTest[783:414835] -[PFUbiquitySwitchboardEntryMetadata setUseLocalStorage:](808): CoreData: Ubiquity: mobile~BB56F5F3-5448-41A3-A142-921D99A85855:iCloudTest 
Using local storage: 1 
managedObjectContext: Optional(<NSManagedObjectContext: 0x15d69340>) 
2015-01-16 22:17:51.815 iCloudTest[783:414857] -[PFUbiquitySwitchboardEntryMetadata setUseLocalStorage:](808): CoreData: Ubiquity: mobile~BB56F5F3-5448-41A3-A142-921D99A85855:iCloudTest 
Using local storage: 0 

正如Design for iCloud Programming Guide的檢查點說,我應該看到Using local store: 1然後Using local storage: 0後不久(在1-5秒內)。到現在爲止還挺好。我很高興。

現在,在不改變一行代碼,只需重新運行該應用程序,將導致以下日誌輸出:

storesDidChange: NSConcreteNotification 0x166606f0 {name = NSPersistentStoreCoordinatorStoresDidChangeNotification; object = <NSPersistentStoreCoordinator: 0x165485b0>; userInfo = { 
added =  (
    "<NSSQLCore: 0x1658dfb0> (URL: file:///var/mobile/Containers/Data/Application/A742A53E-6785-40AC-A21A-16D4BB5F332E/Documents/CoreDataUbiquitySupport/mobile~9CB93B5A-F976-4AB8-B1B3-290F18DE796A/iCloudTest/0A12A44B-599B-49DD-8AD8-546EFD4E26DC/store/iCloudTest.sqlite)" 
    ); 
}} 
2015-01-16 22:08:55.133 iCloudTest[770:412842] -[PFUbiquitySwitchboardEntryMetadata setUseLocalStorage:](808): CoreData: Ubiquity: mobile~9CB93B5A-F976-4AB8-B1B3-290F18DE796A:iCloudTest 
Using local storage: 1 
managedObjectContext: Optional(<NSManagedObjectContext: 0x1658f2e0>) 
2015-01-16 22:11:29.005 iCloudTest[770:412855] -[PFUbiquitySafeSaveFile waitForFileToDownload:](489): CoreData: Ubiquity: <PFUbiquityBaseline: 0x165a5950>(0) 
    permanentLocation: <PFUbiquityLocation: 0x165a6690>: /var/mobile/Library/Mobile Documents/iCloud~com~mycompany~iCloudTest/CoreData/iCloudTest/.baseline/iCloudTest/47DEQpj8HBSa~_TImW~5JCeuQeRkm5NMpJWZG3hSuFU=/baseline.zip 
    safeLocation: <PFUbiquityLocation: 0x165a5ac0>: /var/mobile/Library/Mobile Documents/iCloud~com~mycompany~iCloudTest/CoreData/iCloudTest/.baseline/iCloudTest/47DEQpj8HBSa~_TImW~5JCeuQeRkm5NMpJWZG3hSuFU=/mobile~9CB93B5A-F976-4AB8-B1B3-290F18DE796A 
    currentLocation: <PFUbiquityLocation: 0x165a6690>: /var/mobile/Library/Mobile Documents/iCloud~com~mycompany~iCloudTest/CoreData/iCloudTest/.baseline/iCloudTest/47DEQpj8HBSa~_TImW~5JCeuQeRkm5NMpJWZG3hSuFU=/baseline.zip 

    storeName: iCloudTest 
    modelVersionHash: 47DEQpj8HBSa~_TImW~5JCeuQeRkm5NMpJWZG3hSuFU= 
    baselineArchiveLocation: <PFUbiquityLocation: 0x165a6690>: /var/mobile/Library/Mobile Documents/iCloud~com~mycompany~iCloudTest/CoreData/iCloudTest/.baseline/iCloudTest/47DEQpj8HBSa~_TImW~5JCeuQeRkm5NMpJWZG3hSuFU=/baseline.zip 

Download failed for file, error: Error Domain=NSCocoaErrorDomain Code=512 "The file download timed out." UserInfo=0x16670090 {NSLocalizedDescription=The file download timed out.} 
2015-01-16 22:11:29.009 iCloudTest[770:412855] -[PFUbiquitySwitchboardEntryMetadata setUseLocalStorage:](808): CoreData: Ubiquity: mobile~9CB93B5A-F976-4AB8-B1B3-290F18DE796A:iCloudTest 
Using local storage: 0 

突然,icloud是演戲了!我在Using local storage: 1Using local storage 0之間計時了大約90年代。

這是需要擔心的事嗎?我害怕如果同步需要我的用戶這麼長時間,這將是一個非常討厭的經歷(只是認爲使用應用程序1分鐘+突然iCloud內容彈出...)我想因爲Using local storage 0最終會觸發,iCloud同步已啓用?但是,Debug導航器中的iCloud Report顯示Status: iCloud not configured

我做錯了什麼?

PS:這是筆直蘋果樣板只有額外的代碼來添加iCloud權利。

回答

0

這是沒有什麼可擔心的。與iCloud同步本質上是異步的並且容易出錯(就像您處於飛行模式中一樣)。最終,本地和iCloud版本將同步,您需要處理一些相同記錄衝突的情況。

相關問題