今天的扩展程序在按钮事件 (iOS) 后显示 "unable to load"
today extension shows "unable to load" after button event (iOS)
早上好!
我的 iOS 小部件出现 "unable to load" 问题。我已经阅读了很多关于 "unable to load" 消息的内容,但没有解决我的问题。我不确定,但我认为我的问题是在更改我的内容后刷新小部件。
我的小工具只有一个按钮和一个标签。如果用户按下按钮,标签中的文本将会改变——此时小部件显示 "unable to load"。按下按钮后仅一毫秒。
import UIKit
import NotificationCenter
class TodayViewController: UIViewController, NCWidgetProviding {
@IBOutlet var segment_att: UISegmentedControl!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)) {
completionHandler(NCUpdateResult.NewData)
}
func widgetMarginInsetsForProposedMarginInsets(defaultMarginInsets: UIEdgeInsets) -> UIEdgeInsets {
return UIEdgeInsetsZero
}
@IBAction func button_ae(sender: AnyObject) {
let tableviewclass = TodayTableViewController()
tableviewclass.newData()
}
}
重要的是标签显示在表的 TableViewCell 中ViewController。所以 TableViewController 被嵌入到 Container 中的 ViewController 中...来自按钮的侦听器调用 TableViewController.[=14= 文件的方法 newdata() ]
import UIKit
import NotificationCenter
class TodayTableViewController: UITableViewController, NCWidgetProviding {
@IBOutlet var table: UITableView!
@IBOutlet var label1: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
init()
}
func init() {
let meldung: String = "test"
label1.text = meldung
}
func newData() {
let meldung: String = "new test"
label1.text = meldung
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
代码非常简单和基本 - 所以我想知道这个简单机制中的问题。希望你能帮帮我!
非常感谢!
您的代码假定在调用 newData()
时设置了 label1,甚至在调用构造函数之后立即设置。
尝试使用此 可选链接 语法,如果 属性 为 nil,它将悄悄失败:
import UIKit
import NotificationCenter
class TodayTableViewController: UITableViewController, NCWidgetProviding {
@IBOutlet var table: UITableView!
@IBOutlet var label1: UILabel!
var meldung: String = "test" // <-- meldung is property
override func viewDidLoad() {
super.viewDidLoad()
init()
}
func init() {
label1?.text = melding // <-- optional chaining
}
func newData() {
melding = "new test" // <-- set the class property
label1?.text = meldung // <-- optional chaining
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
而不是调用 newData()
,您可以设置 meldung 属性,例如:
tableviewclass.meldung = "new test"
因为您的 viewDidLoad()
将负责设置来自 属性
的 UILabel 文本
早上好!
我的 iOS 小部件出现 "unable to load" 问题。我已经阅读了很多关于 "unable to load" 消息的内容,但没有解决我的问题。我不确定,但我认为我的问题是在更改我的内容后刷新小部件。
我的小工具只有一个按钮和一个标签。如果用户按下按钮,标签中的文本将会改变——此时小部件显示 "unable to load"。按下按钮后仅一毫秒。
import UIKit
import NotificationCenter
class TodayViewController: UIViewController, NCWidgetProviding {
@IBOutlet var segment_att: UISegmentedControl!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)) {
completionHandler(NCUpdateResult.NewData)
}
func widgetMarginInsetsForProposedMarginInsets(defaultMarginInsets: UIEdgeInsets) -> UIEdgeInsets {
return UIEdgeInsetsZero
}
@IBAction func button_ae(sender: AnyObject) {
let tableviewclass = TodayTableViewController()
tableviewclass.newData()
}
}
重要的是标签显示在表的 TableViewCell 中ViewController。所以 TableViewController 被嵌入到 Container 中的 ViewController 中...来自按钮的侦听器调用 TableViewController.[=14= 文件的方法 newdata() ]
import UIKit
import NotificationCenter
class TodayTableViewController: UITableViewController, NCWidgetProviding {
@IBOutlet var table: UITableView!
@IBOutlet var label1: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
init()
}
func init() {
let meldung: String = "test"
label1.text = meldung
}
func newData() {
let meldung: String = "new test"
label1.text = meldung
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
代码非常简单和基本 - 所以我想知道这个简单机制中的问题。希望你能帮帮我!
非常感谢!
您的代码假定在调用 newData()
时设置了 label1,甚至在调用构造函数之后立即设置。
尝试使用此 可选链接 语法,如果 属性 为 nil,它将悄悄失败:
import UIKit
import NotificationCenter
class TodayTableViewController: UITableViewController, NCWidgetProviding {
@IBOutlet var table: UITableView!
@IBOutlet var label1: UILabel!
var meldung: String = "test" // <-- meldung is property
override func viewDidLoad() {
super.viewDidLoad()
init()
}
func init() {
label1?.text = melding // <-- optional chaining
}
func newData() {
melding = "new test" // <-- set the class property
label1?.text = meldung // <-- optional chaining
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
而不是调用 newData()
,您可以设置 meldung 属性,例如:
tableviewclass.meldung = "new test"
因为您的 viewDidLoad()
将负责设置来自 属性