[英]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.