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