gpt4 book ai didi

ios - 在来自不同 Controller 的函数中使用两个变量

转载 作者:行者123 更新时间:2023-11-28 08:46:34 25 4
gpt4 key购买 nike

我有一个函数,我想在其中使用来自不同 View Controller 的变量和函数内定义的变量。使用以下代码将来自不同 View Controller 的变量发送到第二个 View Controller :

func clock(){

time++

NSNotificationCenter.defaultCenter().postNotificationName("timerValID", object: time)

}


@IBAction func TimerGo(sender: AnyObject) {


timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: ("clock"), userInfo: nil, repeats: true)


}

来自第二个 View Controller (包含两个变量的函数)的代码是:

override func viewDidLoad() {
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("location:"), name: "timerValID", object: self.view.window)}


func location(manager: CLLocationManager, didUpdateLocations locations: [AnyObject]!)(notification: NSNotification){

var startlocation: CLLocation!
var lastlocation: CLLocation!
var traveleddistance: Double = 0
var speed:CLLocationSpeed = CLLocationSpeed()
let time = notification.object as! NSNumber

当我运行该应用程序时,我收到消息:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:无法识别的选择器发送到实例......

最佳答案

错误的重要部分是您遗漏并替换为“.....”的部分。它会告诉您哪个选择器有问题。

不过,查看您的代码,存在一些问题。

首先,在 Swift 中,您不使用 Selector("myFunc"),您只需使用“myFunc”。此外,“对象:”参数是通知的来源。在大多数情况下,您将使用“nil”来表示“此消息的任何来源”。所以你会有

     override func viewDidLoad() {
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "location:", name: "timerValID", object: nil)
}

其次,您的 addObserver 函数将只传递一个对象,即通知。因此,“location:”的签名应该是

    func location(notification: NSNotification){     
//do stuff
}

这可能是您看到的错误的原因,因为您没有具有预期签名的方法。

关于ios - 在来自不同 Controller 的函数中使用两个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35144254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com