我想在集合视图中创建不同大小的单元格。在 collectionViewLayout sizeForItemAtIndexPath 中,我使用 CGSize 对象创建了一个数组。当我想要检索存储在NSArray中的对象(与NSMutableArray相同)时,我会遇到以下语义问题:
Returning 'id' from a function with incompatible result type 'CGSize' (aka 'struct CGSize')
如何访问阵列中的CGSize对象?
编辑:我发现存储在数组中的值来自NSSize类型。
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
UIImage *image;
int row = [indexPath row];
NSArray *mElements = [NSArray arrayWithObjects:[NSValue valueWithCGSize:CGSizeMake(306.0, 270.0)],
[NSValue valueWithCGSize:CGSizeMake(100.0, 150.0)],
[NSValue valueWithCGSize:CGSizeMake(200.0, 150.0)],
[NSValue valueWithCGSize:CGSizeMake(200.0, 150.0)],
[NSValue valueWithCGSize:CGSizeMake(100.0, 150.0)],
nil];
return [mElements objectAtIndex:row]; // Semantic issue
}
我不明白的是,在另一部分,同样的方法有效......
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
CollectionViewCell *myCell = (CollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:Cellid forIndexPath:indexPath];
int row = [indexPath row];
myCell.cellImageView.image = [self.searches objectAtIndex:row]; // Here it works...
return myCell;
}
为什么它适用于具有UIImages的数组而不适用于具有CGSize对象的数组?
欢呼 - jerik答案 0 :(得分:2)
为什么它适用于具有UIImages的数组而不适用于具有CGSize对象的数组?
由于UIImage
s 是对象,CGSize
s 不是对象。(但你可以而且应该看看这个在他们各自的文件中,真的...... )
如果您尝试了解错误消息,那就足够了。您的数组包含对象(类型为NSValue *
)而不是CGSize
结构。所以你不能直接从数组中返回一个对象。您必须获取NSValue
对象并从中提取CGSize
结构:
return [[mElements objectAtIndex:row] CGSizeValue];
答案 1 :(得分:0)
SIGABRT被抛出,因为我的迭代数组比定义的mElements数组长。现在它有效。