gpt4 book ai didi

ios - Swift NSNotificationCenter 在其他类中添加观察者功能

转载 作者:行者123 更新时间:2023-11-29 02:33:30 24 4
gpt4 key购买 nike

我有 ViewContoller,下载类和处理数据的类在 ViewContoller 中需要从互联网下载数据的调用方法,在 NSNotificationcenter 发送完整的消息,并使用数据工作类之后,在我的表中我使用重新加载数据

问题 - notifCenter.postNotificationName("completeLoadService", object: complete) Thread1: EXC_BAD_ACCESS (code = 1, address = 0x10)

    override func viewDidLoad() {
super.viewDidLoad()

ServicesLoad.loadServicesFromSite()

let center : NSNotificationCenter = NSNotificationCenter.defaultCenter()

var load : LoadServiceTrainersAreasClubs = LoadServiceTrainersAreasClubs()

center.addObserver(load, selector: Selector("loadService:"), name: "completeLoadService", object: nil)
}

下载类(class)

        operation.setCompletionBlockWithSuccess({
(operation : AFHTTPRequestOperation!, servicesData : AnyObject!) -> Void in

//some code

var complete : Bool = Bool()
complete = true

var notifCenter : NSNotificationCenter = NSNotificationCenter.defaultCenter()
notifCenter.postNotificationName("completeLoadService", object: complete)

})

类使用数据 LoadServiceTrainersAreasClubs

func loadService(notif : NSNotification){

println("complete")

}

最佳答案

LoadServiceTrainersAreasClubs 是一个局部变量。您没有对它的强烈引用。一旦 viewDidLoad 方法退出,它将被释放。 NSNotificationCenter 将观察者保留为弱引用。因此,看起来 NSNotificationCenter 正在尝试通知您配置的观察者,但它已被释放,这导致了崩溃。

此外,我建议不要使用通知中心来进行此类操作。我建议使用 block 或委托(delegate)来通知消费者此服务已完成。

关于ios - Swift NSNotificationCenter 在其他类中添加观察者功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26623264/

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