繁体   English   中英

在Objective-C中通知自定义委托类

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM