未调用Delegates和Datasource方法

时间:2015-07-17 05:42:19

标签: ios objective-c

有没有办法在Grand Central Dispatch main_queue中调用委托和数据源?

请帮忙。如果未调用这些委托和数据源,则不会显示我的图像!

以下是代码:

messageWebService = [[MessageWebServices alloc]init];
    tempBO = [[MessageBO alloc]init];
    tempBO.messageId = self.messageID;
    dispatch_async(webServiceBackGroundQueue, ^(void){

        tempBO = [messageWebService getDetails:tempBO];
        dispatch_async(dispatch_get_main_queue(), ^
         {

             if (!tempBO.isException)
             {
                 self.subjects.text = tempBO.subject;
                 self.content.text = tempBO.messageli;
                 self.userNmae.text = tempBO.userNmae;
                 self.creaDAte.text = tempBO.creationDate;
                 self.phoneNumb.text = tempBO.phoneNumber;
                 self.eMail.text = tempBO.email;
                 self.amount.text = [NSString stringWithFormat:@"$ %@",tempBO.priceAmount];
                 self.imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:tempBO.imageURL]];
                 self.img = [UIImage imageWithData:self.imageData];
                 if(self.img)
                 {
                     [imageArray addObject:self.img];
                 }
                 else
                 {
                     [imageArray addObject:[UIImage imageNamed:@"no_photo.png"]];
                 }
                 hFlowView.delegate = self;
                 hFlowView.dataSource = self;
                 hFlowView.pageControl = hPageControl;


             }



        });
    });

2 个答案:

答案 0 :(得分:1)

您无法直接调用delegate / datasource方法,但可以调用将触发委托或数据源方法的支持方法。 例如。对于表视图 - 如果调用reload table视图,将调用与重新加载表关联的数据源和委托方法。

但是对于GCD,只有当相应类的对象在范围内时,它们才会反映出更改。否则就没用了。

请提供您的确切方案/代码的额外详细信息,以便我们更准确地指导您。

答案 1 :(得分:0)

您可以将任何代码放在gcd块中。但是,在执行块时,请注意对象,委托对象和数据源对象仍在范围内。您可能需要将局部变量(例如)移动为成员变量。