自定义代表在swift中获得nil

时间:2016-02-19 11:42:31

标签: ios swift delegates

我正在尝试使用swift中的TLPhotoControllerDelegate创建自定义委托。但是,不通过回调调用doSomething方法。代表呢? TLPhotoControllerDelegate()不会触发类B TLPhotoControllerDelegate方法。提前谢谢!

Class A: 
protocol TLPhotoControllerDelegate {
    func addimageCollectionView(image:UIImage)
}


class TLPhotoController: TLBaseViewController  {

    // Mark: Properties
    var delegate:TLPhotoControllerDelegate?

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

    @IBAction func capturePhoto(sender: TLButton) {
        delegate.addimageCollectionView(image)
    }
}

Class B:

class TLPatientAlbumCollectionViewController:TLPhotoControllerDelegate {

    var photoController:TLPhotoController?

    override func viewDidLoad() {
        photoController?.delegate = self

        super.viewDidLoad()
        loadData()  
    }   

    func addimageCollectionView(image: UIImage) {

    }
}

2 个答案:

答案 0 :(得分:0)

根据评论中的代码,您似乎没有在任何地方实例化TLPhotoController

您的代码可能如下所示:

func viewDidLoad() {
    super.viewDidLoad()

    photoController = TLPhotoController() // Or however you want to initialise
    photoController?.delegate = self
}

当你考虑调用代码时,我还建议放入几个断点来查看变量的状态,看看发生了什么。

修改
在澄清聊天中的问题之后,问题是代理没有被设置。建议的解决方案是在推送视图控制器的prepareForSegue:期间设置它。

答案 1 :(得分:0)

您似乎没有初始化TLPatientAlbumCollectionViewController类的photoController属性。您应该在viewDidLoad方法中初始化它。