我已成功在NSObject
课程中设置了一个委托,我可以传输一些数据并运行一些选择器。
问题是,我无法理解如何将一些值发送回我设置委托的那个类。我有一个ViewController,SGDownloader
具有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。虽然以后什么都没做。
答案 0 :(得分:0)
你的守则应该有效,但你看错了地方。
isBusy
设置在SGDownloader的viewDidLoad
中,对吗?在attemptNewDownload
中,您将创建一个SGQueueController实例。然后将其Delegate设置为已创建的SGDownloader并在其上调用checkTheQueue
。
在checkTheQueue
中,您创建了一个新的SGDownloader实例,但new
未调用viewDidLoad
(默认情况下)。所以新创建的SGDownloader-Instance的isBusy
- 属性仍为NO。只需放出[SGDownloader new]
- 行并更改
BOOL checkBool = downloaderInstance.isBusy;
到
BOOL checkBool = delegate.isBusy;