gpt4 book ai didi

ios - 在项目和共享扩展之间共享数据

转载 作者:行者123 更新时间:2023-12-01 15:41:03 25 4
gpt4 key购买 nike

我想在我的 Main Project 和我的 Share Extension 之间共享数据。这就是我所做的:

1.ProjectShare Extension 中启用 App Groups

2.viewDidLoad 内的 Project 中保存数据(工作正常,我测试过):

DataHandler.getWishlists { (success, dataArray, dropOptionsArray)  in
if success && dataArray != nil {
self.shouldAnimateCells = true
self.dataSourceArray = dataArray as! [Wishlist]
self.theCollectionView.isHidden = false
self.theCollectionView.reloadData()
self.dropOptions = dropOptionsArray as! [DropDownOption]
self.addButton.isEnabled = true
self.activityIndicator.stopAnimating()

// save dataSourceArray in UserDefaults
if let defaults = UserDefaults(suiteName: UserDefaults.Keys.groupKey) {
defaults.setDataSourceArray(data: dataArray as! [Wishlist])
defaults.synchronize()
} else {
print("error Main")
}
}
}

3.Share Extension 中检索数据(错误 2 触发!)

if let defaults = UserDefaults(suiteName: UserDefaults.Keys.groupKey) {
if let data = defaults.getDataSourceArray() {
dataSourceArray = data
defaults.synchronize()
}else {
print("error 2")
}

} else {
print("error 1")
}

UserDefaults + Helpers

extension UserDefaults {

public struct Keys {
public static let groupKey = "group.wishlists-app.wishlists"

public static let dataSourceKey = "dataSourceKey"
}



func setDataSourceArray(data: [Wishlist]){
set(try? PropertyListEncoder().encode(data), forKey: Keys.dataSourceKey)
synchronize()
}

func getDataSourceArray() -> [Wishlist]? {
if let data = UserDefaults.standard.value(forKey: Keys.dataSourceKey) as? Data {
if let dataSourceArray = try? PropertyListDecoder().decode(Array<Wishlist>.self, from: data) as [Wishlist] {
return dataSourceArray
}
}
return nil
}
}

我无法检索我的 Share Extension 中的数据,但我不知道为什么。有人可以帮我吗?

最佳答案

您的辅助函数 getDataSourceArray() 会尝试访问 UserDefaults.standard,它不会在您的主机应用和扩展应用之间共享。您需要使用共享容器。

  • UserDefaults.standard -> 在主机和扩展之间共享
  • UserDefaults(suiteName:) -> 在主机和扩展之间共享

尝试将您的功能更改为:

func getDataSourceArray() - > [Wishlist] ? {
if let data = UserDefaults(suiteName: UserDefaults.Keys.groupKey).value(forKey: Keys.dataSourceKey) as ? Data {
if let dataSourceArray =
try ? PropertyListDecoder().decode(Array < Wishlist > .self, from: data) as[Wishlist] {
return dataSourceArray
}
}
return nil
}

关于ios - 在项目和共享扩展之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61563368/

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