有没有办法在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;
}
});
});
答案 0 :(得分:1)
您无法直接调用delegate / datasource方法,但可以调用将触发委托或数据源方法的支持方法。 例如。对于表视图 - 如果调用reload table视图,将调用与重新加载表关联的数据源和委托方法。
但是对于GCD,只有当相应类的对象在范围内时,它们才会反映出更改。否则就没用了。
请提供您的确切方案/代码的额外详细信息,以便我们更准确地指导您。
答案 1 :(得分:0)
您可以将任何代码放在gcd块中。但是,在执行块时,请注意对象,委托对象和数据源对象仍在范围内。您可能需要将局部变量(例如)移动为成员变量。