簡體   English   中英

iCloud Core Data iOS 6至iOS 7最初是空的本地后備存儲

[英]iCloud Core Data iOS 6 to iOS 7 empty local fallback store initially

從iOS 6過渡到iOS 7時,我一直在尋找正確或任何良好的參考來解決我的問題。

我們的iOS 6應用程序版本:當iCloud禁用/不可用時,可使用iCloud和本地備用存儲。 已使用此iOS 6版本,並且iCloud存儲文件中填充了大量數據。

我們的iOS 7應用程序版本:使用新的iOS 7 iCloud Core Data API配置。 首次運行此版本不會顯示使用iOS 6版本捕獲的現有iCloud存儲的數據,即使該文件存在並包含所有數據。 原因是使用了新的閃亮的Core Data后備存儲,其中不包含任何現有數據。 僅在長時間延遲之后才顯示數據。 這是不理想的,因為看起來好像用戶丟失了數據。

是否存在解決此問題的解決方案,還是應該在新的后備存儲為空且正在填充的情況下通過使用其他后備存儲來手動處理此問題?

就像腳注一樣,模型的重量也有所變化。 不確定此空數據庫是否是遷移的產物? 將做一個測試,看看我是否可以建立這個。

最初由Core Data在iOS7下提供的后備存儲將不會填充來自iCloud的任何數據。 但是,如果用戶在iCloud存儲准備就緒之前輸入了一些數據,則這些數據將在可用時遷移到iCloud存儲。

如果您的應用正在執行輕量級遷移,那么這很可能是您看到延遲的原因。 遷移完成后,您重新啟動了應用程序,那么啟動時間又應該很小。

測試延遲是否來自遷移的另一種方法是使用舊模型,因此不需要遷移,並查看這是否有很大的不同。

請注意,除非用戶輸入數據,否則不會填充新的后備存儲。

如果您觀察到NSPersistentStoreCoordinatorStoresDidChangeNotificationNSPersistentStoreCoordinatorStoresWillChangeNotification ,則將在切換存儲時收到通知。

您可能還想在升級過程中向用戶顯示一條消息,即直到收到NSPersistentStoreCoordinatorStoresDidChangeNotification通知。

看看WWDC2013 207的會議記錄和視頻。

編輯:這是一個iCloud文件打開的日志。 這條線

2013-12-11 10:47:10.794 iProject2iOS[5431:60b] AppDelegate.fileOpened called

從UIManagedDocument打開完成處理程序調用。 這樣可以告訴我UIManagedDocument已成功打開。 至此,我知道它正在使用本地后備存儲。 之后,我必須等待一段時間,然后出現下一行

2013-12-11 10:47:11.291 iProject2iOS[5431:60b] AppDelegate.storesDidChange called - >>>>>>>>>>>>>>>>>>>>>>>>>>>>

這正在處理storeDidChange通知,現在我知道該應用程序正在使用iCloud存儲。 但是,根據設備的不同,如果設備尚未下載和導入任何日志,則iCloud存儲區也可能仍然為空。 為了解決這個問題,我檢查了是否可以在數據庫中找到特定的記錄,一旦找到它們,我就知道數據導入至少已開始加載種子數據。 我還應該提到,在創建本地副本之前,我會檢查iCloud文件是否存在,以避免合並問題。 顯然,如果iCloud已關閉,則不可能。

2013-12-11 10:47:10.290 iProject2iOS[5431:60b] AppDelegate.loadFile called.
2013-12-11 10:47:10.292 iProject2iOS[5431:60b] AppDelegate.managedObjectModel called.
2013-12-11 10:47:10.509 iProject2iOS[5431:60b] AppDelegate. setting merge policy
2013-12-11 10:47:10.545 iProject2iOS[5431:60b] AppDelegate.storesDidChange called - >>>>>>>>>>>>>>>>>>>>>>>>>>>>
2013-12-11 10:47:10.555 iProject2iOS[5431:5877] CoreData: warning: no NSValueTransformer with class name 'NSKeyedUnarchiveFromDataTransformerName' was found for attribute 'preferences' on entity 'Details'
2013-12-11 10:47:10.556 iProject2iOS[5431:5877] CoreData: warning: no NSValueTransformer with class name 'NSKeyedUnarchiveFromDataTransformerName' was found for attribute 'scope' on entity 'Details'
2013-12-11 10:47:10.558 iProject2iOS[5431:5877] CoreData: warning: no NSValueTransformer with class name 'NSKeyedUnarchiveFromDataTransformerName' was found for attribute 'details' on entity 'ExpenseTransaction'
2013-12-11 10:47:10.560 iProject2iOS[5431:5877] CoreData: warning: no NSValueTransformer with class name 'NSKeyedUnarchiveFromDataTransformerName' was found for attribute 'details' on entity 'Interface'
2013-12-11 10:47:10.562 iProject2iOS[5431:5877] CoreData: warning: no NSValueTransformer with class name 'NSKeyedUnarchiveFromDataTransformerName' was found for attribute 'details' on entity 'Issues'
2013-12-11 10:47:10.564 iProject2iOS[5431:5877] CoreData: warning: no NSValueTransformer with class name 'NSKeyedUnarchiveFromDataTransformerName' was found for attribute 'details' on entity 'OpexTransaction'
2013-12-11 10:47:10.568 iProject2iOS[5431:5877] CoreData: warning: no NSValueTransformer with class name 'NSKeyedUnarchiveFromDataTransformerName' was found for attribute 'details' on entity 'ProjectNode'
2013-12-11 10:47:10.570 iProject2iOS[5431:5877] CoreData: warning: no NSValueTransformer with class name 'NSKeyedUnarchiveFromDataTransformerName' was found for attribute 'details' on entity 'Risks'
2013-12-11 10:47:10.573 iProject2iOS[5431:5877] CoreData: warning: no NSValueTransformer with class name 'NSKeyedUnarchiveFromDataTransformerName' was found for attribute 'comments' on entity 'System'
2013-12-11 10:47:10.574 iProject2iOS[5431:5877] CoreData: warning: no NSValueTransformer with class name 'NSKeyedUnarchiveFromDataTransformerName' was found for attribute 'functions' on entity 'System'
2013-12-11 10:47:10.578 iProject2iOS[5431:5877] CoreData: warning: no NSValueTransformer with class name 'NSKeyedUnarchiveFromDataTransformerName' was found for attribute 'details' on entity 'Timesheet'
2013-12-11 10:47:10.608 iProject2iOS[5431:60b] AppDelegate.storesDidChange called - >>>>>>>>>>>>>>>>>>>>>>>>>>>>
2013-12-11 10:47:10.609 iProject2iOS[5431:5877] -[PFUbiquitySwitchboardEntryMetadata setUseLocalStorage:](754): CoreData: Ubiquity:  mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB:New Project Local_UUID_4D7AFA0C-3C62-452E-8302-6401ED356478
Using local storage: 1
2013-12-11 10:47:10.794 iProject2iOS[5431:60b] AppDelegate.fileOpened called
2013-12-11 10:47:11.291 iProject2iOS[5431:60b] AppDelegate.storesDidChange called - >>>>>>>>>>>>>>>>>>>>>>>>>>>>
2013-12-11 10:47:11.292 iProject2iOS[5431:60b] OpeningViewController.refreshUI: called
2013-12-11 10:47:11.293 iProject2iOS[5431:60b] MenuViewController.refreshUI: called
2013-12-11 10:47:11.294 iProject2iOS[5431:60b] OpeningViewController. about to call displayItem
2013-12-11 10:47:11.295 iProject2iOS[5431:60b] OpeningViewController. displayItem has been called
2013-12-11 10:47:11.649 iProject2iOS[5431:60af] -[PFUbiquitySwitchboardEntryMetadata setUseLocalStorage:](754): CoreData: Ubiquity:  mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB:New Project Local_UUID_4D7AFA0C-3C62-452E-8302-6401ED356478
Using local storage: 0

如果正在打開其本地存儲,則這是調用序列。 因為iCloud未啟用,所以我不希望再有其他storeDidChange通知。 我在“打開”完成處理程序中設置了一個標志,然后在收到storeDidChange通知時,如果設置了此標志,則刷新UI,否則將忽略它(如果iCloud為ON)。 如果我們不使用iCloud,則無需調用refreshUI,因為該UI由打開完成處理程序激活,此時本地存儲可用。

2013-12-11 10:55:26.255 iProject2iOS[5440:60b] AppDelegate.application:didFinishLaunchingWithOptions: called
2013-12-11 10:55:26.259 iProject2iOS[5440:60b] AppDelegate.checkUserICloudPreferenceAndSetupIfNecessary called
2013-12-11 10:55:26.460 iProject2iOS[5440:60b] AppDelegate. User preference for au.com.ossh.iProject2.UseICloudStorage is NO
2013-12-11 10:55:26.462 iProject2iOS[5440:60b] AppDelegate. User disabled iCloud
2013-12-11 10:55:26.464 iProject2iOS[5440:60b] AppDelegate. iCloud is active
2013-12-11 10:55:29.977 iProject2iOS[5440:60b] AppDelegate.loadFile called.
2013-12-11 10:55:29.980 iProject2iOS[5440:60b] AppDelegate.managedObjectModel called.
2013-12-11 10:55:30.190 iProject2iOS[5440:60b] AppDelegate. setting merge policy
2013-12-11 10:55:30.231 iProject2iOS[5440:60b] AppDelegate.storesDidChange called - >>>>>>>>>>>>>>>>>>>>>>>>>>>>
2013-12-11 10:55:30.330 iProject2iOS[5440:60b] AppDelegate.fileOpened called

這是指向有關使用Core Data和iCloud時啟用UI的其他詳細信息的鏈接。

暫無
暫無

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

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