gpt4 book ai didi

ios - iPhone 和 Apple Watch 应用程序之间 Core Data SQLite 存储更改的通知

转载 作者:行者123 更新时间:2023-11-29 12:16:07 29 4
gpt4 key购买 nike

我有一个 iPhone (iOS 8) 和 Apple Watch (watchOS 1) 应用程序,它们使用 Core Data(SQLite 商店,位于共享应用程序组中)共享数据。这两个应用程序都使用放置在共享框架中的相同数据访问代码。 NSPersistentStoreCoordinator 按以下方式设置:

lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
let sharedContainerURL = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier(self.sharedAppGroup)!
let storeURL = sharedContainerURL.URLByAppendingPathComponent(self.databaseName)
let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)

var error: NSError? = nil
if coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: storeURL, options: nil, error: &error) == nil {
fatalError("Unable to add persistent store: \(error)")
}

return coordinator
}()

根据我的理解,在运行时每个应用程序都有自己的 NSPersistenStoreCoordinator 实例(因为 iPhone 应用程序和 WatchKit 扩展确实有完全独立的地址空间),但是这两个应用程序连接到完全相同的 SQLite 数据库文件。

当 Watch 应用更改公共(public) SQLite 存储中的某些数据时,如何通知 iPhone 应用?反之亦然:当 iPhone 应用更改公共(public)持久存储中的某些数据时,如何通知 Watch 应用?

最佳答案

我发现非常满意的解决方案是使用 MMWormhole图书馆。

它通过使用 CFNotificationCenter Darwin Notifications 和在共享应用程序组中写入/读取数据文件来工作,从而导致 iOS 应用程序和应用程序扩展(Watch 应用程序、今天的小部件等)之间的即时通信。

基本代码如下:

  • 虫洞初始化

    wormhole = MMWormhole(applicationGroupIdentifier: appGroup, optionalDirectory: nil)
  • 将数据对象传递给虫洞

    let payload = ["Key": "Value"]
    wormhole.passMessageObject(payload, identifier: theSameMessageIdentifier)
  • 监听来自虫洞的传入对象

    wormhole.listenForMessageWithIdentifier(theSameMessageIdentifier) { message -> Void in

    if let payloadDictionary = message as? Dictionary<String, String> {
    // Do some work
    }
    }

就这么简单。

关于ios - iPhone 和 Apple Watch 应用程序之间 Core Data SQLite 存储更改的通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31968833/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com