即使没有互联网连接,也会调用NSPersistentStoreCoordinatorStoresWillChangeNotification

时间:2016-01-07 02:04:21

标签: ios swift core-data icloud

我试图通过关注Apple的Enabling iCloud Support在我的应用上设置iCloud。我已经为核心数据添加了一个支持iCloud的持久性存储,并检索了所需的日志消息。

然后我删除了我的应用并重新安装了它。我的NSPersistentStoreCoordinatorStoresDidChangeNotification被调用,所以现在我要进行第三部分,即iCloud执行一次性设置,这是我的代码:

func subscribeToPersistentStoreCoordinatorStoresNotifications() {

        // Subscribe for first time setup of iCloud
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "enableUI", name: NSPersistentStoreCoordinatorStoresDidChangeNotification, object: sharedContext.persistentStoreCoordinator)
        NSNotificationCenter.defaultCenter().addObserverForName(NSPersistentStoreCoordinatorStoresWillChangeNotification, object: sharedContext.persistentStoreCoordinator, queue: NSOperationQueue.mainQueue()) { notification in

            // First reset the managed object context
            self.sharedContext.performBlock() {
                print("=== RESETTING CONTEXT ===")
                self.sharedContext.reset()
            }

            // Then disable UI
            dispatch_async(dispatch_get_main_queue()) {
                print("=== DISABLING UI===")
                self.disableUI()
            }
        }
    }

我刚刚按照Apple提供的模板,在用户看到的第一个View Controller中的viewWillAppear中调用了此函数。

然后我遵循了Apple的设置和测试程序:

  

设置:在iOS设备上,启用飞行模式。如果您要创建Mac应用,请禁用每个网络接口。完全从您的设备中删除您的应用。

     

测试:运行您的应用并创建一些记录。禁用飞行模式或   重新启用网络接口并等待Core Data打印“正在使用   本地存储:0“到Xcode中的控制台。核心数据调用你的   通知处理程序和您的记录消失。在下一节中   你将学习如何坚持内存中的变化。

在我开始测试它之前一切顺利,即使我在飞行模式下启动我的应用程序我认为我的iPhone仍然可以连接到iCloud,因此调用NSPersistentStoreCoordinatorStoresWillChangeNotification

注意:我还测试了数据存储在CoreData中,然后在数据成功上传到iCloud时删除了应用程序。当我在飞行模式下重新安装应用程序时,我仍然可以检索存储的数据。

有什么想法吗?

0 个答案:

没有答案