クラスでデリゲートを正常にセットアップし、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 になります。後で何もしませんが。