iOS today扩展的目标是容器类的成员身份还是用户默认值?

iOS today扩展的目标是容器类的成员身份还是用户默认值?,ios,swift,today-extension,Ios,Swift,Today Extension,我有一个iOS应用程序,它也有一个today扩展。我试图从主容器应用程序中提供今天的扩展数据,但是有很多可解码的模型类用于保存数据 我的问题是: 使用userDefaults从容器中获取/设置数据是否更好 或将今天的扩展目标包括在所有扩展中 模型课 在todayExtension目标中包含大量类是否会导致 性能问题、电池耗电或诸如此类的问题 谢谢 *编辑 我的模型类的一个示例是: class Alert : Codable { var type : String? var sequence :

我有一个iOS应用程序,它也有一个today扩展。我试图从主容器应用程序中提供今天的扩展数据,但是有很多可解码的模型类用于保存数据

我的问题是:

  • 使用userDefaults从容器中获取/设置数据是否更好
    或将今天的扩展目标包括在所有扩展中 模型课

  • 在todayExtension目标中包含大量类是否会导致 性能问题、电池耗电或诸如此类的问题

  • 谢谢

    *编辑 我的模型类的一个示例是:

    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扩展的目标成员是否是个坏主意。