我使用Parse作为后端管理用户在消息传递应用中使用,并使用Layer提供的消息服务。
Layer定义用户对象必须符合的ATLParticipant
协议。这反过来指定用于显示用户化身的ATLAvatarItem
协议。 ATLAvatarItem
协议的一个属性是UIImage *avatarImage
。
由于我的用户是Parse对象,因此头像图像作为PFFile
存储在用户身上。当然,我想检索数据以创建UIImage
并在后台完成avatarImage
的请求,以免阻塞主线程并锁定UI。但是,这意味着调用getDataInBackgroundWithBlock:
,这意味着我对avatarImage
的调用返回nil
,因为块在返回之前未触发。
目前,我有以下代码来检查数据是否已经在返回UIImage之前下载,或者在后台下载数据以准备下次请求图像。这仍然可以获取主线程上的数据。
- (UIImage *)avatarImage {
if(self.photo.isDataAvailable) {
return [UIImage imageWithData:[self.photo getData]];
}
else {
[self.photo getDataInBackground];
return nil;
}
}
有没有更好的方法可以从PFFile获取数据并返回UIImage,而不会阻止UI?