繁体   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