如何在iOS应用程序和today view extension之间共享数据

如何在iOS应用程序和today view extension之间共享数据,ios,swift,xcode,Ios,Swift,Xcode,我试图在今天视图扩展中显示人员姓名;但我似乎不能这么做。我看了很多YouTube视频,但都没用。如果可以,我希望你回答这个问题 应用程序工作原理:在应用程序中键入您的姓名。它将显示在今日视图扩展中 关于应用程序:我有一个文本字段和按钮。文本字段是人名,按钮是保存姓名的按钮 我想在今天分机中显示名称 谢谢。这是一个简单的今日扩展示例。在这个示例中,我只显示并更新用户名 这是我今天的扩展情节提要图像 现在,视图控制器代码是: import UIKit import NotificationCente

我试图在今天视图扩展中显示人员姓名;但我似乎不能这么做。我看了很多YouTube视频,但都没用。如果可以,我希望你回答这个问题

应用程序工作原理:在应用程序中键入您的姓名。它将显示在今日视图扩展中

关于应用程序:我有一个文本字段和按钮。文本字段是人名,按钮是保存姓名的按钮

我想在今天分机中显示名称


谢谢。

这是一个简单的今日扩展示例。在这个示例中,我只显示并更新用户名

这是我今天的扩展情节提要图像 现在,视图控制器代码是:

import UIKit
import NotificationCenter

class TodayViewController: UIViewController, NCWidgetProviding {

    @IBOutlet weak var lnameLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    override func viewDidAppear(_ animated: Bool) {
        if let name = UserDefaults.init(suiteName: "group.com.ahmad.widget")?.value(forKey: "name"){

            lnameLabel.text = name as? String
        }
        else{
            lnameLabel.text = "Wait..."
        }
    }

    func widgetPerformUpdate(completionHandler: (@escaping (NCUpdateResult) -> Void)) {
        // Perform any setup necessary in order to update the view.

        // If an error is encountered, use NCUpdateResult.Failed
        // If there's no update required, use NCUpdateResult.NoData
        // If there's an update, use NCUpdateResult.NewData

        completionHandler(NCUpdateResult.newData)
    }

}
我创建了一个故事板并在其中添加了一个按钮,而不是在他的按钮操作中,我在今天更新了用户名

viewController的代码为:

class ViewController: UIViewController {
    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var nameTextfield: UITextField!


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }



    @IBAction func SetNameOnWigetAction(_ sender: Any) {

        nameLabel.text = nameTextfield.text
        UserDefaults.init(suiteName: "group.com.ahmad.widget")?.setValue(nameTextfield.text, forKey: "name")
    }

}

这里是一个简单的today扩展示例。在这个示例中,我只显示和更新用户名

这是我今天的扩展情节提要图像 现在,视图控制器代码是:

import UIKit
import NotificationCenter

class TodayViewController: UIViewController, NCWidgetProviding {

    @IBOutlet weak var lnameLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    override func viewDidAppear(_ animated: Bool) {
        if let name = UserDefaults.init(suiteName: "group.com.ahmad.widget")?.value(forKey: "name"){

            lnameLabel.text = name as? String
        }
        else{
            lnameLabel.text = "Wait..."
        }
    }

    func widgetPerformUpdate(completionHandler: (@escaping (NCUpdateResult) -> Void)) {
        // Perform any setup necessary in order to update the view.

        // If an error is encountered, use NCUpdateResult.Failed
        // If there's no update required, use NCUpdateResult.NoData
        // If there's an update, use NCUpdateResult.NewData

        completionHandler(NCUpdateResult.newData)
    }

}
我创建了一个故事板并在其中添加了一个按钮,而不是在他的按钮操作中,我在今天更新了用户名

viewController的代码为:

class ViewController: UIViewController {
    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var nameTextfield: UITextField!


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }



    @IBAction func SetNameOnWigetAction(_ sender: Any) {

        nameLabel.text = nameTextfield.text
        UserDefaults.init(suiteName: "group.com.ahmad.widget")?.setValue(nameTextfield.text, forKey: "name")
    }

}

将该组添加到权利/能力中

  • 转到应用程序目标的“功能”选项卡
  • 启用应用程序组
  • 创建一个新的应用程序组,标题为“适当的东西”。它必须从组开始
  • 让Xcode完成为您创建此组的过程
  • 使用组ID将数据保存到NSUserDefaults,并在扩展中使用

    从苹果的应用程序扩展指南:

    在主应用程序中,保存人名:

    let defaults = UserDefaults(suiteName: "your group ID")
    defaults!.set("person name", forKey: "key for person name")
    defaults!.synchronize()
    
    let defaults = UserDefaults(suiteName: "your group ID")
    let savedPersonName = defaults!.string(forKey: "key for person name")
    
    在扩展名中,可以使用保存的人名:

    let defaults = UserDefaults(suiteName: "your group ID")
    defaults!.set("person name", forKey: "key for person name")
    defaults!.synchronize()
    
    let defaults = UserDefaults(suiteName: "your group ID")
    let savedPersonName = defaults!.string(forKey: "key for person name")
    

    将该组添加到权利/能力中

  • 转到应用程序目标的“功能”选项卡
  • 启用应用程序组
  • 创建一个新的应用程序组,标题为“适当的东西”。它必须从组开始
  • 让Xcode完成为您创建此组的过程
  • 使用组ID将数据保存到NSUserDefaults,并在扩展中使用

    从苹果的应用程序扩展指南:

    在主应用程序中,保存人名:

    let defaults = UserDefaults(suiteName: "your group ID")
    defaults!.set("person name", forKey: "key for person name")
    defaults!.synchronize()
    
    let defaults = UserDefaults(suiteName: "your group ID")
    let savedPersonName = defaults!.string(forKey: "key for person name")
    
    在扩展名中,可以使用保存的人名:

    let defaults = UserDefaults(suiteName: "your group ID")
    defaults!.set("person name", forKey: "key for person name")
    defaults!.synchronize()
    
    let defaults = UserDefaults(suiteName: "your group ID")
    let savedPersonName = defaults!.string(forKey: "key for person name")
    

    只是一个快速通知,因为我也错过了它

    为使其正常工作,请在应用程序目标上创建组
    然后在今天的目标中添加群组功能,并勾选刚刚从主应用目标创建的功能(应该列出)

    只是一个快速通知,因为我也错过了它

    为使其正常工作,请在应用程序目标上创建组
    然后在今天的目标中添加组功能,并勾选刚刚从主应用的目标创建的组(应该列出)

    好的,但是我应该使用哪个bundle ID?应用程序或今天的extensionUserDefaults.init(suiteName:“group.com.ahmad.widget”)?.setValue(nameTextfield.text,forKey:“name”)在“group.com.ahmad.widget”中这不是应用程序ID或今天的扩展ID。这只是一个唯一的ID。你可以根据需要更改它,但当你从观察者那里获得价值时,它将是相同的。这是视频链接bro chill如何为应用程序添加小部件好的,我刚刚测试了项目,但它总是显示“等待…”。我应该使用userdeafults来保存名称吗?我看过那个视频,但是我在今天视图中的标签显示errorOk,但是我应该使用哪个bundle ID?应用程序或今天的extensionUserDefaults.init(suiteName:“group.com.ahmad.widget”)?.setValue(nameTextfield.text,forKey:“name”)在“group.com.ahmad.widget”中这不是应用程序ID或今天的扩展ID。这只是一个唯一的ID。你可以根据需要更改它,但当你从观察者那里获得价值时,它将是相同的。这是视频链接bro chill如何为应用程序添加小部件好的,我刚刚测试了项目,但它总是显示“等待…”。我应该使用userdeafults来保存名称吗?我看过那个视频,但我在“今日”视图中的标签显示错误我使用的是Xcode 11.4.1,所以我没有看到启用选项。但是,如果我单击顶部的添加按钮,我会看到应用程序组。即使我启用了它,我应该如何将persons name保存到UserDefaults:检索persons name:如果您可以编辑您的答案并将这些注释放在您的答案中会更好。:)我使用的是Xcode 11.4.1,所以我没有看到启用选项。但是,如果我单击顶部的添加按钮,我会看到应用程序组。即使我启用了它,我应该如何将persons name保存到UserDefaults:检索persons name:如果您可以编辑您的答案并将这些注释放在您的答案中会更好。:)