gpt4 book ai didi

ios - 使用 NSNotifications 传递信息时为零?

转载 作者:搜寻专家 更新时间:2023-11-01 06:05:38 26 4
gpt4 key购买 nike

我有一个控制在屏幕上拖动 UIButton 的类。我想在 touchesEnded 上捕获按钮的标签/最终位置。

我在我的 DragImageClass 中:

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {

let dict = ["position":String(self.center),"tag": String(self.tag)]

NSNotificationCenter.defaultCenter().postNotificationName("buttonDropped", object: nil, userInfo: dict)

print(dict["position"]) // Does get printed
print("Should have sent") // Does get called
}

然后在我需要的信息的主视图中:

我的观察者:

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(testController.touchesStopped(_:)), name: "buttonDropped", object: nil)

我的功能:

func touchesStopped(notif : AnyObject) {
if let dict = notif.object as? NSDictionary { //Some error with this data type I guess?
let position = dict["position"]
let tag = dict["tag"]
print(position) // doesn't get printed
print(tag) // doesn't get printed
}
}

知道为什么我从这些值中得不到任何返回吗?当我尝试强制解包时,它只是给我“线程错误指令”的事情。

最佳答案

正如您在调用中看到的那样,对象为 nil,因为您将字典作为 userInfo 传递(这是正确的做法):

NSNotificationCenter.defaultCenter().postNotificationName("buttonDropped", object: nil, userInfo: dict)

所以为了取回那个字典,不要使用通知的 object 属性,使用 userInfo 属性:

func touchesStopped(notif: NSNotification) {
if let dict = notif.userInfo {
let position = dict["position"]
let tag = dict["tag"]
print(position)
print(tag)
}
}

旁注:将一个点转换成一个字符串然后再转换回一个点会很痛苦,你应该像这样使用 NSValue :

let dict: [String:AnyObject] = [
"position": NSValue(CGPoint: self.center),
"tag": self.tag
]
let position = (dict["position"] as? NSValue)?.CGPointValue()
let tag = dict["tag"] as? Int

关于ios - 使用 NSNotifications 传递信息时为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38645951/

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