-1

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

干杯——杰里克

4

2 回答 2

2

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

因为UIImages对象,所以CGSizes不是对象。但你可以而且应该在他们各自的文档中查找这一点,真的......

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

return [[mElements objectAtIndex:row] CGSizeValue];
于 2013-01-31T22:30:27.453 回答
0

SIGABRT 被抛出,因为我的迭代数组比定义的 mElements 数组长。现在它起作用了。

于 2013-01-31T23:44:31.293 回答