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

时间:2014-10-29 05:22:31

标签: ios iphone xcode swift

我有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)
}

下载课程

        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")

}

1 个答案:

答案 0 :(得分:1)

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

此外,我建议不要使用通知中心这样的事情。我建议使用块或代理通知消费者此服务完成。