簡體   English   中英

具有Xcode6和Swift的iOS8中的CoreData + iCloud

[英]CoreData+iCloud in iOS8 with Xcode6 and Swift

我讀了很多CoreData + iCloud並了解它,但很簡單。 但是,我很早就被困住了,很好奇你們是否有任何想法。

我的工作台: Xcode6.1.1,Swift,CoreData和新增的iCloud權利(在iOS8.1 Simulator和iOS8.1設備上測試)

要親自查看,只需在Xcode中啟動一個新的“ Singe View Application”項目,然后選中“ Use Core Data”復選框。 為了啟用iCloud,我添加了

let storeOptions = [
    NSPersistentStoreUbiquitousContentNameKey: "iCloudTest"
]

在調用coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration:URL:options:error:)之前coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration:URL:options:error:)

我還添加了NSPersistentStoreCoordinatorStoresWillChangeNotificationNSPersistentStoreCoordinatorStoresDidChangeNotificationNSPersistentStoreDidImportUbiquitousContentChangesNotification

第一次運行應用程序時,控制台輸出如下所示:

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編程指南的檢查要點》所述,我應該看到“ 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: 1和“ Using local storage 0之間的時間大約為90秒。

這值得擔心嗎? 恐怕如果同步對我的用戶來說需要那么長時間,那將是一個令人討厭的體驗(只是認為使用應用程序1分鍾以上,然后突然出現iCloud內容...),我想這是因為Using local storage 0最終會觸發,是否已啟用iCloud同步? 但是,“調試”導航器中的Status: iCloud not configured iCloud報告”顯示Status: iCloud not configured

難道我做錯了什么?

PS:這是簡單的蘋果樣板,僅帶有用於添加iCloud權利的其他代碼。

不用擔心。 與iCloud同步本質上是異步的並且容易出錯(就像您處於飛行模式一樣)。 最終,本地版本和iCloud版本將同步,並且您需要處理某些情況下相同記錄發生沖突的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM