使用gcsize对象访问数组

时间:2013-01-31 22:25:52

标签: ios objective-c nsmutablearray nsarray

我想在集合视图中创建不同大小的单元格。在 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

2 个答案:

答案 0 :(得分:2)

  

为什么它适用于具有UIImages的数组而不适用于具有CGSize对象的数组?

由于UIImage s 对象,CGSize s 不是对象。但你可以而且应该看看这个在他们各自的文件中,真的......

如果您尝试了解错误消息,那就足够了。您的数组包含对象(类型为NSValue *)而不是CGSize结构。所以你不能直接从数组中返回一个对象。您必须获取NSValue对象并从中提取CGSize结构:

return [[mElements objectAtIndex:row] CGSizeValue];

答案 1 :(得分:0)

SIGABRT被抛出,因为我的迭代数组比定义的mElements数组长。现在它有效。