クラスでデリゲートを正常にセットアップし、NSObjectいくつかのデータを転送していくつかのセレクターを実行できます。
問題は、デリゲートを設定したクラスに値を戻す方法を理解できないことです。SGDownloaderプロパティを持つViewControllerがありBOOL、デリゲートクラスでそれをチェックして、セレクターの条件付き起動を行いたいと考えています。問題は、私はそれを機能させることができないようです。私はストーリーボードを使用しています。これが私のコードです:
-(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 になります。後で何もしませんが。