2

我已经成功地在我的班级中设置了一个委托,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。虽然后来什么也没做。

4

1 回答 1

0

您的代码应该可以工作,但您正在寻找错误的地方。

isBusy进入viewDidLoadSGDownloader,对吗?在attemptNewDownload您创建 SGQueueController 的实例。然后将其 Delegate 设置为已创建的 SGDownloader 并调用checkTheQueue它。

checkTheQueue您创建一个新的 SGDownloader 实例,但new不调用viewDidLoad(默认情况下)。所以isBusy新创建的SGDownloader-Instance的-property还是NO。只需放出[SGDownloader new]-line 并更改

BOOL checkBool = downloaderInstance.isBusy;

BOOL checkBool = delegate.isBusy;

于 2013-04-08T08:35:54.523 回答