ios - 需要以编程方式创建 plist 并访问今天的小部件扩展目标

标签 ios swift today-extension

我需要从主目标中创建的 TodayViewController 访问 plist。所以我还需要创建具有今日小部件目标访问权限的 plist。

我已经创建了这样的plist,但是我需要从今天的扩展目标访问这个plist

let InfoDict:NSDictionary = [
    "ParentInfo":"Mathew"
]

DispatchQueue.main.async {
    let isWritten = InfoDict.write(toFile: self.getPlistPath(), atomically: true)
    print("is the file created: \(isWritten)")

}


func getPlistPath()->String{

    let fileManager = FileManager.default

    let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
    let path = documentDirectory.appending("/UserConfig.plist")

    if(!fileManager.fileExists(atPath: path)){
        self.saveGlobalValuesToPlist()
    }

    return path

}

最佳答案

我认为您需要将 plist 文件放在 App Group 文件夹中:

第 1 步:创建应用程序组:项目导航器 -> YOUR_APP_TARGET -> 功能 -> 激活应用程序组 -> 添加应用程序组 ID(通常为 group.YOUR_APP_BUNDLE)

第 2 步:在您的小部件目标中添加此应用程序组 ID,方法是在功能中激活应用程序组并选择此相同的应用程序组 ID

第 3 步:将您的 plist 保存在 App Group 文件夹中。使用此代码从 TodayViewController 检索此文件夹的 url和你的主应用程序:
guard let appGroupURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: YOUR_APP_GROUP_ID) else { return }

希望这有帮助。

关于ios - 需要以编程方式创建 plist 并访问今天的小部件扩展目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54704035/

相关文章:

ios - 在 xcode/swift 中使用位置管理器获取用户的当前位置时,我得到的值为 nil。有什么建议么?

ios - 无法创建另一个分发证书,已达到可用分发证书的最大数量

ios - 使用 SwiftyJSON 将 JSON 数组反序列化为 Swift 对象

ios - 以编程方式更改 slider 值并更新标签

ios - 在 IOS10 设备上禁用今日小部件

ios - 快速管理类范围

objective-c - 导航栏标题中的字体截止

ios - 无法使用类型为 '[[String : Any]]' 的索引下标类型为 'String' 的值

ios - 如何在今天的扩展中访问 CoreData 模型(iOS)

swift - NSPersistentCloudKitContainer:与 App Extension 共享单个数据库