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