在app中使用Today扩展和ViewController之间的公共类

时间:2014-11-14 00:00:57

标签: ios swift

我正在尝试创建今日应用扩展程序。我想有一个UIViewController用于将所有数据加载到app并在此UIViewController for Today Extension和App中使用相同的变量。 例如:我有针对TodayAppExtension的UILabel和app,我想连接Label文本,如:
my_label.text =“你好”
两个UILabels ......我试过公开课,就像这样做:

这是两个视图控制器的类别

  

导入UIKit

     

public class AppDataViewController:UIViewController {

@IBOutlet public var pacificLabel: UILabel!

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

override public func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


public func updateClocks() {
    var time: NSDate = NSDate()
    println("Time: \(time)")

    var timeString : NSString = "Time: \(time)"

    let formatter:NSDateFormatter = NSDateFormatter();
    var timeZone = NSTimeZone(name: "UTC")
    formatter.timeZone = timeZone
    formatter.dateFormat = "HH:mm:ss"
    println("UTC Time: \(formatter.stringFromDate(time))")

    timeZone = NSTimeZone(name: "US/Pacific")
    formatter.timeZone = timeZone
    formatter.dateFormat = "HH:mm:ss"
    println("PST Time: \(formatter.stringFromDate(time))")
    self.pacificLabel.text = formatter.stringFromDate(time)


}
     

}

如何从App中的StoryBoard和Extension中的StoryBoard访问此self.pacificLabel.text? 总是当我试图从ViewController调用函数updateClock()时,我得到了这个:

致命错误:在解包可选值时意外发现nil

1 个答案:

答案 0 :(得分:0)

你从未创造过pacificLabel。

在你的

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

您需要创建一个UILabel对象。

您获得的错误是因为您在使用它时将其声明为可选项。所以你不需要打开它。因此,它预计pacificLabel会存在,而在你解开它时它并没有。

在viewDidLoad中创建UILabel对象,它将起作用。

如果问题是您的故事板中存在此标签,则需要控制 - 将该对象从视图类(故事板中的视图)拖动到脚本以创建对该对象的引用。

Drag from view class