UICollectionView 布局在 iPad 上崩溃,但在 iPhone 上工作正常

Posted

技术标签:

【中文标题】UICollectionView 布局在 iPad 上崩溃,但在 iPhone 上工作正常【英文标题】:UICollectionView layout crashes on iPad, but works fine on iPhone 【发布时间】:2015-05-06 14:55:40 【问题描述】:

UICollection 视图布局在 ipad 中崩溃,但在 iphone 上运行良好。 我们是否必须以不同于 iphone 的方式管理 ipad 的 UICollection 视图布局?

我的代码:

-(void)reloadData 


    if(collectionData!= nil)
    
        collectionData = nil;
    

    [self.collectionView reloadData];



-(void)setCollectionView 

    if(self.collectionView == nil) 
            //        self.collectionView = (UICollectionView *)[self.view viewWithTag:_wallCollectionView_tag];
       self.collectionView.dataSource = self;
        self.collectionView.delegate = self;
        self.collectionView.userInteractionEnabled = YES;
    



`enter code here`- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
printf("\n = %s",__FUNCTION__);

    return 1;

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section


    return [collectionData count];


- (CGSize)collectionView:(UICollectionView *)collectionView
                  layout:(UICollectionViewLayout*)collectionViewLayout
  sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
    if ( [ [ UIScreen mainScreen ] bounds ].size.width > 320) 
        return CGSizeMake(118, 118);
    
    return CGSizeMake(100, 100);

【问题讨论】:

你有崩溃日志吗? 2015-05-06 18:21:53.777 FlrtAlertVariation[39992:1010801] 流布局 collectionView:layout:sizeForItemAtIndexPath:] 和 [_UIFlowLayoutItem setItemFrame:]: 消息中不支持负或零大小发送到已释放实例 0x7fcc35296310 和 2015-05-06 16:14:56.036 FlrtAlertVariation[37736:957131] *** 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“*** -[__NSArrayM objectAtIndex:]:索引 5越界 [0 .. 4]' *** 首先抛出调用堆栈: @RavinderKumar 更新您的问题,不要在评论中发布异常。 【参考方案1】:
*** Terminating app due to uncaught exception 'NSRangeException', reason:     '*** -[__NSArrayM objectAtIndex:]: index 5 beyond bounds [0 .. 4]' ***

这清楚地表明,您试图访问超出数组范围的元素。下一步检查:

    您对 -numberOfItemsInSection 方法和 -cellForItemAtIndexPath 方法使用相同的数组。 您不会在 collectionView 更新时改变数组(删除\添加元素)。 您正确访问数据源数组:要检索数组的最后一个元素,它有 5 个元素,您应该使用键“4” - collectionData[4] 或 collectionData[[collectionData count] - 1]。

【讨论】:

感谢您的回复。让我再次检查一下我的代码,我会更新。 大家好,我检查了我的代码,没有发现任何问题。但我有一个很大的疑问,这个应用程序在 iphone 上运行良好,我使用 Autoresizing it .xib,所以这个应用程序可以在 iphone 和 ipad 设备上运行。 .xib 文件中的自动调整大小是否有任何问题(与应用程序崩溃有关)???? 您的崩溃日志不完整。请为崩溃发布完整的堆栈跟踪,也许它会使问题更清楚。 1) [VCWallView2015-05-06 18:21:53.776 myproject[39992:1010801] 流布局不支持负数或零大小 2)[_UIFlowLayoutItem setItemFrame:]:消息发送到释放的实例0x7fcc35296310

以上是关于UICollectionView 布局在 iPad 上崩溃,但在 iPhone 上工作正常的主要内容,如果未能解决你的问题,请参考以下文章

如何在单个列中设置每个 UICollectionView 部分

UICollectionView 单元格消失

UICollectionView 列网格间隙

UICollectionView - 复制 Photos.app 功能

旋转后在 UICollectionView 中保留第一个可见项目

UICollectionView 讲解-备