菜鸟教程小白 发表于 2022-12-11 17:13:30

ios - 今天扩展在按钮事件后显示 "unable to load"(iOS)


                                            <p><p>早上好!</p>

<p>我的 iOS 小部件出现“无法加载”问题。我已经阅读了很多关于“无法加载”消息的内容,但没有解决我的问题。我不确定,但我认为我的问题是在更改内容后刷新小部件。</p>

<p>我的小部件有一个按钮和一个标签。如果用户按下按钮,标签中的文本将更改 - 此时小部件显示“无法加载”。按下按钮后只需一毫秒。</p>

<pre><code>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) -&gt; Void)) {

      completionHandler(NCUpdateResult.NewData)
    }

    func widgetMarginInsetsForProposedMarginInsets(defaultMarginInsets: UIEdgeInsets) -&gt; UIEdgeInsets {
      return UIEdgeInsetsZero
    }

    @IBAction func button_ae(sender: AnyObject) {
       let tableviewclass = TodayTableViewController()
       tableviewclass.newData()
    }

}
</code></pre>

<p>重要的是标签显示在 TableViewController 的 TableViewCell 中。所以 TableViewController 被嵌入在一个 Container 内的 ViewController 中……按钮的监听器调用 TableViewController 文件的 newdata() 方法。</p>

<pre><code>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 = &#34;test&#34;
      label1.text = meldung
    }

    func newData() {
      let meldung: String = &#34;new test&#34;
      label1.text = meldung
    }

    override func didReceiveMemoryWarning() {
      super.didReceiveMemoryWarning()
    }   

}
</code></pre>

<p>代码非常简单和基本 - 所以我想知道这个简单机制中的问题。我希望你能帮助我!</p>

<p>非常感谢!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您的代码假定在调用 <code>newData()</code> 时已设置 label1,即使在调用构造函数之后也是如此。</p>

<p>尝试使用这种 <em>可选链</em> 语法,如果属性为 nil,它将悄悄地失败:</p>

<pre><code>import UIKit
import NotificationCenter

class TodayTableViewController: UITableViewController, NCWidgetProviding {

    @IBOutlet var table: UITableView!
    @IBOutlet var label1: UILabel!

    var meldung: String = &#34;test&#34;   // &lt;-- meldung is property

    override func viewDidLoad() {
      super.viewDidLoad()
      init()
    }

    func init() {
      label1?.text = melding       // &lt;-- optional chaining
    }

    func newData() {
      melding = &#34;new test&#34;         // &lt;-- set the class property
      label1?.text = meldung       // &lt;-- optional chaining
    }

    override func didReceiveMemoryWarning() {
      super.didReceiveMemoryWarning()
    }   

}
</code></pre>

<p>您可以设置 <strong>meldung</strong> 属性,而不是调用 <code>newData()</code>,例如:</p>

<pre><code>tableviewclass.meldung = &#34;new test&#34;
</code></pre>

<p>因为您的 <code>viewDidLoad()</code> 将负责从属性设置 UILabel 文本</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 今天扩展在按钮事件后显示&#34;unable to load&#34;(iOS),我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/38853010/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/38853010/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 今天扩展在按钮事件后显示 &#34;unable to load&#34;(iOS)