我很难让我的子类PFCollectionViewCell
与PFImageView
. 我正在使用 Storyboards 来安装我的 PA_ProfileCollectionViewCell。
我要做的就是加载图像(我可以从解析中成功获取),并将其分配给PFImageView
我的自定义单元格中的 a 。我将不胜感激任何帮助/见解,可以帮助我用棒球棒猛击我的电脑,并在慢动作的荣耀中破坏我的办公室。
我想要的结果:有一个自定义单元格(的子类PFCollectionViewCell
)供-collectionView:cellForItemAtIndexPath:object:
问题:我的自定义属性PFImageView *imageThumb
(在我的子类上PFCollectionViewCell
)不响应loadInBackground:
或者是类setFile:
上的两种方法PFImageView
。
为了清楚起见,这是我的代码:
- 我的自定义 PFCollectionViewCell:ProfileCollectionViewCell
@interface PA_ProfileCollectionViewCell : PFCollectionViewCell
@property (weak, nonatomic) IBOutlet PFImageView *imageThumb;
@end
- 在 viewDidLoad 中注册自定义类
- (void)loadView {
[super loadView];
[self.collectionView registerClass:[PA_ProfileCollectionViewCell class]
forCellWithReuseIdentifier:_cellIdentifier];
}
- 设置单元格collectionView:cellForItemAtIndexPath:object
这是发生主要问题的地方。根据调用,我的单元格值已成功绘制为深灰色,cell.backgroundColor:
但所有将图像分配给我的 imageThumb 的尝试都失败了。请注意,在下面的源代码中,我imageThumb
不响应选择器loadInBackground
or setFile
,它与PFImageView
.
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
cellForItemAtIndexPath:(NSIndexPath *)indexPath
object:(PFObject *)object {
PA_ProfileCollectionViewCell *cell = (PA_ProfileCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:_cellIdentifier
forIndexPath:indexPath];
cell.backgroundColor = [UIColor grayColor];
// Load the photo
PFFile *pingThumb = [object objectForKey:@"imageMediumFile"];
if (pingThumb){
BOOL canLoadInBackground = [cell.imageThumb respondsToSelector:@selector(loadInBackground:)];
BOOL canSetFile = [cell.imageThumb respondsToSelector:@selector(setFile:)];
NSLog(@"can cell.imageThumb loadInBackground? : %hhd", canLoadInBackground);
NSLog(@"can cell.imageThumb setFile? : %hhd", canSetFile);
[cell.imageThumb setFile:pingThumb];
[cell.imageThumb loadInBackground:^(UIImage *image, NSError *error) {
if(!error){
NSLog(@"CODE WON'T REACH THIS POINT.");
NSLog(@"loadInBackground doesn't exist on cell.imageThumb)");
[UIView animateWithDuration:0.2f animations:^{
cell.imageThumb.alpha = 1.0f;
}];
}
}];
}
return cell;
}
NSLog()
上面代码片段中所有语句的输出是:
can cell.imageThumb loadInBackground? : 0 (NO)
can cell.imageThumb setFile? : 0 (NO)
我尝试过的其他事情:
我已经挑选了ParseUIDemo上的源代码,但是他们的所有实现都使用库存PFCollectionViewCell
,没有任何自定义或子类化,所以我尝试调整我的项目以使用他们的方法,但我也永远无法在那里工作。
我已经通读了这个答案,在 SO 上,这导致我尝试爬过我的cell.contentViews.subviews
并cell.subviews
寻找一个PFImageView
都没有成功的尝试:
// [DIDN'T WORK]
for (UIView *subview in cell.contentView.subviews) {
if ([subview isKindOfClass:[PFImageView class]]) {
NSLog(@"Yay! I found a PFImageView"); // Never gets called
break;
}
}
然后我在 SO 上尝试了这个答案,这让我尝试PFImageView
使用标签从我的故事板中获取实例,这同样不成功。
PFImageView *photoView = (PFImageView *)[cell.contentView viewWithTag:242];
if(!photoView) NSLog(@"Can't find PFImageView with tag in Storyboards");
// -> Can't find PFImageView with tag in Storyboards
最后,我将 classNames 的每个可行组合提供给所有需要 classNames 的方法PFQueryCollectionViewController
。例如:我尝试了以下代码行,其中我用PA_ProfileCollectionViewCell
,UICollectionViewCell
和替换了所有 CLASSNAMEHERE 实例,所有实例PFCollectionViewCell
都具有等量的FAIL:
// the cell (with casting)
CLASSNAMEHERE *cell = (CLASSNAMEHERE *)[cv dequeueReusableCellWithReuseIdentifier:...];
// the cell (without casting)
CLASSNAMEHERE *cell = [cv dequeueReusableCellWithReuseIdentifier:...];
// registering the class
[self.collectionView registerClass:[CLASSNAMEHERE class]
forCellWithReuseIdentifier:_cellIdentifier];
更新#01:
根据用户@soulshined 的建议,我尝试跳过setFile:
调用,因为它没有通过 Parse 文档出现在 API 中(但我从来没有遇到错误,或者unrecognized selector error
在使用它时),所以我尝试了下面的代码片段,没有运气(注意如何setFile:
替换为.file
:
cell.imageThumb.file = pingThumb;
//[cell.imageThumb setFile:pingThumb];
[cell.imageThumb loadInBackground:^(UIImage *image, NSError *error) {
if(!error){
NSLog(@"CODE WON'T REACH THIS POINT.");
NSLog(@"loadInBackground doesn't exist on cell.imageThumb)");
[UIView animateWithDuration:0.2f animations:^{
cell.imageThumb.alpha = 1.0f;
}];
}
}];
更新#02
同样,根据@soulshined 的建议,我使用了此处给出的建议,并将我的更改PFImageView *imageThumb
为 a UIImageView *imageThumb
,并尝试将返回的 NSdata 分配给getDataInBackground:withBlock:
图像,这是我的代码片段(请注意,我确实得到了“得到数据! " 输出到控制台,但图像仍未显示):
// pingThumb is a PFFile
[pingThumb getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
if (!error) {
NSLog(@"Got data");
UIImage *image = [UIImage imageWithData:data];
[cell.imageThumb setImage:image];
}
}];
那么任何人都可以想到我缺少的步骤吗?为什么PFImageView
加载 a 的子类如此困难PFCollectionViewCell
?
提前感谢任何花时间帮助我的人!