6

有没有办法从它的 Notification-Service-Extension 实例中获取保存在 iOS 应用程序沙箱中的数据?我想在传递 contenhandler 之前从数据库中获取一些数据。

我从内部测试

    override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
            ...
            print("NotificationService didReceive UNNotificationRequest, contentHandler: \(contentHandler)")

            let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
            let filePath = "\(documentsPath)/Database.db"

            print("  documentsPath: \(filePath)")

            let fileManager = FileManager.default
            var isDir : ObjCBool = false
            if fileManager.fileExists(atPath: filePath, isDirectory:&isDir) {
                if isDir.boolValue {
                    print("  file exists and is a directory")

                } else {
                    print("  file exists and is a NOT a directory")
                }
            } else {
                print("file does not exist")
            }...

对我来说,看起来扩展程序有自己的沙箱和自己的文档文件夹。

该应用程序使用文件夹“Application”,而扩展程序使用文件夹“PluginKitPlugin”,两者都在“/var/mobile/Containers/Data/”内。

更新:似乎无法访问应用程序沙箱容器。

4

1 回答 1

5

从 App Extension Programming Guide 中,App Extension 可以使用应用程序组与您的包含应用程序共享数据。

读:

if let defaults = UserDefaults(suiteName: "my.app.group") {
    if let value = defaults.value(forKey: "key") {
        NSLog("\(value)")
    }
}

写:

if let defaults = UserDefaults(suiteName: "my.app.group") {
    defaults.set("value", forKey: "key")
}

  • MMWormhole:iOS 应用程序和扩展程序之间的消息传递。
  • Wormhole:一种更优雅的在 iOS 应用程序和扩展程序之间传递消息的方式。
于 2017-02-09T13:12:33.603 回答