簡體   English   中英

在Objective-C中通知自定義委托類

[英]Informing a custom delegate class in Objective-C

我已經在我的NSObject類中成功設置了一個委托,並且能夠傳輸一些數據並運行一些選擇器。

問題是,我不明白如何將一些值發送回設置委托的那個類。 我有一個具有BOOL屬性的ViewController, SGDownloader ,我想在委托類上對其進行檢查,以有條件地觸發某些選擇器。 問題是,我似乎無法使其正常運行。 我正在使用情節提要,這是我的代碼:

-(void)checkTheQueue {
    SGDownloader *downloaderInstance = [SGDownloader new];
    NSLog((@"Downloader is now %i"), downloaderInstance.isBusy);
    BOOL checkBool = downloaderInstance.isBusy;

    if (checkBool == NO) {
        SEL selector = @selector(checkTheThing);
        if (delegate && [delegate respondsToSelector:selector]) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
            [delegate performSelector:selector];
#pragma clang diagnostic pop
        }
    }
    else {
        NSLog(@"Sorry, I'm busy");
    }
}

我在第一個類中觸發選擇器checkTheThing ,該類是我想要從其中獲取isBusy值的類。 這也是一個@optional委托方法。 事實是, BOOL值始終為0,如果我嘗試傳遞字符串,則始終為nil

我懷疑這行有問題SGDownloader *downloaderInstance = [SGDownloader new]; 也許故事板變得混亂不清或類似的東西。

編輯:

SGDownloader部分代碼:

- (IBAction)attemptNewDownload:(id)sender {

    SGQueueController *myProtocol = [SGQueueController new];
    myProtocol.delegate = self;
    NSLog((@"Busy value equals %i while checking the protocol"), isBusy);
    [myProtocol checkTheQueue];
}

在這里, NSLog告訴我該值為1。幾秒鍾后,在我的協議類中為0。 盡管以后什么也沒做。

您的代碼應該可以工作,但是您在尋找錯誤的地方。

isBusy在SGDownloader的viewDidLoad中設置,對嗎? attemptNewDownload您將創建attemptNewDownload的實例。 然后,將其Delegate設置為已創建的SGDownloader,並在其上調用checkTheQueue

checkTheQueue您將創建一個新的SGDownloader實例,但是new不會調用viewDidLoad (默認情況下)。 因此,新創建的SGDownloader-Instance的isBusy屬性仍然為NO。 只需松開[SGDownloader new]並進行更改

BOOL checkBool = downloaderInstance.isBusy;

BOOL checkBool = delegate.isBusy;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM