iOS解析个人资料图片上的黑条(PFImageView)
Posted
技术标签:
【中文标题】iOS解析个人资料图片上的黑条(PFImageView)【英文标题】:iOS parse black strip on profile picture (PFImageView) 【发布时间】:2015-08-30 20:10:42 【问题描述】:我正在使用 Parse 作为我的应用程序的后端,并且个人资料照片似乎没有正确显示,如图所示:
john_appleseed 的照片上有一条黑色条纹。
这是我保存个人资料图像的代码:
NSData *profileData = UIImagePNGRepresentation(cell1.profileView.image);
PFFile *profileFile = [PFFile fileWithName:@"profilePhoto" data:profileData];
[profileFile saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error)
if (!error)
if (succeeded)
[user setObject:profileFile forKey:@"profilePhoto"];
[user saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error)
if (!error)
else
];
];
这是我检索图像的方式:(在 PFQueryTableViewController 中)
- (PFQuery *)queryForTable
//NSLog(@"called");
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
NSString *filter = [defaults objectForKey:@"topicFilter"];
NSLog(@"queryfortable: %@", filter);
PFQuery *query = [PFQuery queryWithClassName:@"Questions"];
[query includeKey:@"user"];
[query whereKey:@"category" equalTo:filter];
[query orderByDescending:@"createdAt"];
return query;
- (PFObject *)objectAtIndexPath:(NSIndexPath *)indexPath
if (indexPath.section == self.objects.count)
return nil;//this is for the load more cell.
return [self.objects objectAtIndex:indexPath.section];
在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object
PFUser *user = [object objectForKey:@"user"];
PFImageView *profileImgView = (PFImageView *)[cell viewWithTag:1];
profileImgView.layer.cornerRadius = profileImgView.frame.size.height/2;
profileImgView.layer.masksToBounds = YES;
PFFile *file = user[@"profilePhoto"];
profileImgView.file = file;
[profileImgView loadInBackground];
有什么想法吗?非常感谢。
【问题讨论】:
从后台看图片是什么样的?这是压缩质量损失的情况还是在后端正确显示?如果是这样,可能只是线程的情况,loadInBackground
被异步调用,UI组件需要发生在主线程上
@soulshined 后端的图像非常好。 loadInBackground 确实是异步调用的,但是假设网络很慢,imageView 将只是一个白色的空白视图而不是黑色,直到它被加载。
所以你在后台加载它,当它成功时,你在回调中将someImageView.image
设置为个人资料图片
仅供参考,我的第一条评论中有错字。应该说明,如果不是质量损失问题,则可能是线程问题。
@soulshined 我会试一试的。此外,这种情况并非每次都会发生,有时效果很好,有时效果不佳。
【参考方案1】:
您应该在主线程上更新用户界面。由于您在后台加载某些内容,因此您应该通知主线程它需要更新对象。 loadInBackground
正在异步下载文件。
这是一个示例,您可以根据需要进行更改,以说明在回调中更新 UI 组件有其好处;这是基于 Parses 自己的 AnyPic:
NSString *requestURL = file.url; // Save copy of url locally (will not change in block)
[file getDataInBackgroundWithBlock:^(NSData *data, NSError *error)
if (!error)
//dispatch on main thread
UIImage *image = [UIImage imageWithData:data];
else
NSLog(@"Error on fetching file");
];
【讨论】:
我以前用getDataInBackgroundWithBlock
,但是看看这篇文章:Loading Images Stored on Parse
是的@GellertLee,无论哪种方式PFFile
都是数据(请参阅here),如果您使用获取“用户”的方法或实际设置@987654328 的方法更新您的问题@ in,我可以根据您的需要对其进行编辑。这是一个“一刀切”的答案
查看我编辑的问题。我在自定义单元格的 xib 中设置了 PFImageView。以上是关于iOS解析个人资料图片上的黑条(PFImageView)的主要内容,如果未能解决你的问题,请参考以下文章