iOS today扩展的目标是容器类的成员身份还是用户默认值?
我有一个iOS应用程序,它也有一个today扩展。我试图从主容器应用程序中提供今天的扩展数据,但是有很多可解码的模型类用于保存数据 我的问题是:iOS today扩展的目标是容器类的成员身份还是用户默认值?,ios,swift,today-extension,Ios,Swift,Today Extension,我有一个iOS应用程序,它也有一个today扩展。我试图从主容器应用程序中提供今天的扩展数据,但是有很多可解码的模型类用于保存数据 我的问题是: 使用userDefaults从容器中获取/设置数据是否更好 或将今天的扩展目标包括在所有扩展中 模型课 在todayExtension目标中包含大量类是否会导致 性能问题、电池耗电或诸如此类的问题 谢谢 *编辑 我的模型类的一个示例是: class Alert : Codable { var type : String? var sequence :
或将今天的扩展目标包括在所有扩展中 模型课
class Alert : Codable {
var type : String?
var sequence : Int?
var status : String?
var issueTimeText : String?
var expiryTime : String?
var alertId : String?
var alertBannerText : String?
var alertHeaderText : String?
var bannerColour : String?
var zones : [String]?
// TEXT IS [STRING], STRING FOR TESTING
var text : String?
var tcisURL : String?
enum CodingKeys: String, CodingKey {
case type = "type";
case sequence = "sequence";
case status = "status";
case issueTimeText = "issueTimeText";
case expiryTime = "expiryTime";
case alertId = "alertId";
case alertBannerText = "alertBannerText";
case alertHeaderText = "alertHeaderText";
case bannerColour = "bannerColour";
case text = "text";
case zones = "zones";
case tcisURL = "tcisURL";
}
init(inType: String, inIssueTimeText:String, inBannerText:String, inText: String, inColor: String) {
self.type = inType
self.issueTimeText = inIssueTimeText
self.alertBannerText = inBannerText
self.text = inText;
self.bannerColour = inColor
}
这完全取决于您希望数据如何进入today扩展。是的,我发现用户默认值是最好的。您必须在应用程序和今日扩展中创建应用程序组。这就是用户默认值与today扩展的工作方式。因此,当您希望将数据保存到用户默认值(通过按钮或更新计时器)时,您将需要以下代码
UserDefaults.init(suiteName:“group.com.bundleID.appName”)?.setValue(textfield.text,forKey:“name”)
这就是它被保存的方式。在您的“今日”扩展中的视图显示(\uanimated:Bool)
下,您需要检索数据并将其放在标签上,因此请编写以下代码<代码>如果let name=UserDefaults.init(suiteName:“group.com.bundleID.appName”)?.value(forKey:“name”)
{
label.text=名称为?字符串
}
它应该会起作用。我在YouTube上也有一段关于这个教程的视频
希望这能有所帮助,Nathan这一切都取决于您希望数据如何进入today扩展。是的,我发现用户默认值是最好的。您必须在应用程序和今日扩展中创建应用程序组。这就是用户默认值与today扩展的工作方式。因此,当您希望将数据保存到用户默认值(通过按钮或更新计时器)时,您将需要以下代码
UserDefaults.init(suiteName:“group.com.bundleID.appName”)?.setValue(textfield.text,forKey:“name”)
这就是它被保存的方式。在您的“今日”扩展中的视图显示(\uanimated:Bool)
下,您需要检索数据并将其放在标签上,因此请编写以下代码<代码>如果let name=UserDefaults.init(suiteName:“group.com.bundleID.appName”)?.value(forKey:“name”)
{
label.text=名称为?字符串
}
它应该会起作用。我在YouTube上也有一段关于这个教程的视频
希望这能有所帮助,Nathan我假设您希望将警报历史记录保存到设备中。 您不想为此使用
UserDefaults
如果我的假设是正确的,您最好使用核心数据将数据存储到您的设备中,并检索数据以供以后使用。核心数据是一种资源,允许您将数据存储到设备和数据库(如果需要)。这里有太多要讨论的内容,但有一个很棒的博客,它将引导您了解这一点和其他许多事情。我假设您希望将警报历史记录保存到设备。 您不想为此使用
UserDefaults
如果我的假设是正确的,您最好使用核心数据将数据存储到您的设备中,并检索数据以供以后使用。核心数据是一种资源,允许您将数据存储到设备和数据库(如果需要)。这里有太多要讨论的内容,但有一个很棒的博客,它将引导您了解这一点和其他许多事情。您存储的是什么样的数据?多少钱?你能给出你所指的数据模型的一个例子吗?“在所有模型类中包括今天的扩展目标?”这是什么意思?不能在类中包含目标。我认为你混淆了术语或混淆了概念。在扩展中包含内容时,有两件事需要注意:1)与应用程序相比,可用内存有限2)并非所有可以包含在应用程序中的框架/标题等都可以包含在扩展中。@Gruntscakes我指的是每个模型类,将todayExtension作为目标成员身份的一部分包括在内(即,复选框指示哪个类对哪个目标“可见”)。无论如何,谢谢你的帮助。@Jake请看编辑。它们都是符合Codable的简单结构。目标是将警报历史记录保存到设备?您存储的是什么类型的数据?多少钱?你能给出你所指的数据模型的一个例子吗?“在所有模型类中包括今天的扩展目标?”这是什么意思?不能在类中包含目标。我认为你混淆了术语或混淆了概念。在扩展中包含内容时,有两件事需要注意:1)与应用程序相比,可用内存有限2)并非所有可以包含在应用程序中的框架/标题等都可以包含在扩展中。@Gruntscakes我指的是每个模型类,将todayExtension作为目标成员身份的一部分包括在内(即,复选框指示哪个类对哪个目标“可见”)。无论如何,谢谢你的帮助。@Jake请看编辑。它们都是符合Codable的简单结构。目标是将警报历史记录保存到设备?感谢您的回复和建议。这就是我目前的做法,但我只是想知道,将一堆模型类作为“今日扩展”的目标成员是否是一个坏主意。感谢您的回复和建议。这就是我目前的做法,但我只是想知道,将一堆模型类作为today扩展的目标成员是否是个坏主意。