gpt4 book ai didi

ios - 如何将响应数据设置到 TodayExtension 小部件中

转载 作者:可可西里 更新时间:2023-11-01 01:07:21 25 4
gpt4 key购买 nike

尝试从服务访问响应数据以显示到 TodayExtenstion 小部件

import Foundation

struct MarketIndex:Codable {

let indicesName: String
let indicesValue: String
let dateValue : String
let indicesChangeValue : String
let changePercentage : String
let indexVolume: String?
}

struct MarketIndexCache {
static let key = "MARKET_INDEX_KEY"
static func save(_ value: [MarketIndex]!) {
UserDefaults.standard.set(try? PropertyListEncoder().encode(value), forKey: key)
}
static func get() -> [MarketIndex]! {
var marketIndex: [MarketIndex]!
if let data = UserDefaults.standard.value(forKey: key) as? Data {
marketIndex = try? PropertyListDecoder().decode([MarketIndex].self, from: data)
return marketIndex!
} else {
return marketIndex
}
}
static func remove() {
UserDefaults.standard.removeObject(forKey: key)
}
}

MarketIndexClient 服务调用类代码片段

marketIndexClient.fetchMarketIndex(symbol: "AAPL,MSFT"){ marketIndex in
self.stockIndex = marketIndex
completion()
MarketIndexCache.save(self.stockIndex)
self.dispatchGroupCalls.leave()

}

当尝试访问另一个能够获取已保存数据的 View Controller 时。

override func viewDidLoad() {
super.viewDidLoad()
marketIndex = MarketIndexCache.get()
}

当尝试从 TodayWidgetViewController 访问它时,它返回 nil。

import UIKit
import NotificationCenter
class TodayWidgetViewController

override func viewDidLoad() {
super.viewDidLoad()

marketIndex = MarketIndexCache.get()
print(marketIndex as Any)

}

两个目标的UserDefaults不会互相共享数据吗?

当我选择目标 projectName 时,我是否需要配置 TodayExtenstion,以便当我的项目在设备上运行时两者需要相互同步。

我无法在运行应用程序项目时调试 TodayExtenstionWidget。

这是我在使用 TodayExtenstion 时发现的观察结果。

我无法弄清楚为什么它返回零!您的意见将真正指导我实现它。

错误信息:

在展开 Optional 值时意外发现 nil fatal error :在展开可选值时意外发现 nil

最佳答案

嘿,正如@LowKostKustomz 所解释的,您需要在主应用程序和扩展程序中激活应用程序组。然后在从主应用程序和扩展程序保存时,尝试类似

struct MarketIndexCache {
static let key = "MARKET_INDEX_KEY"
static let groupBundleID = <#you group identifier#>
static func save(_ value: [MarketIndex]!) {
let defaults = UserDefaults.init(suiteName: groupBundleID)
defaults?.set(try? PropertyListEncoder().encode(value), forKey: key)
}
static func get() -> [MarketIndex]! {
var marketIndex: [MarketIndex]!
if let data = defaults?.value(forKey: key) as? Data {
let defaults = UserDefaults.init(suiteName: groupBundleID)
marketIndex = try? PropertyListDecoder().decode([MarketIndex].self, from: data)
return marketIndex!
} else {
return marketIndex
}
}
static func remove() {
let defaults = UserDefaults.init(suiteName: groupBundleID)
defaults?.removeObject(forKey: key)
}
}

关于ios - 如何将响应数据设置到 TodayExtension 小部件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55820193/

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