iOS CollectionView'NSInternalInconsistencyException'

时间:2013-03-12 04:49:05

标签: ios cocoa exception

所以,我正在玩iOS编程。没有太多时间,但我已经推迟了很久才学会它。但是,由于这个棘手的问题,我现在被困2天了。当我尝试将单元格添加到我的collectionView时,我收到以下错误。

'NSInternalInconsistencyException',原因:'尝试将第0项插入第0部分,但更新后第0部分只有0项'

这是我的代码:

@interface DocumentsViewController() {
    FileManager *fileManager;
    NSMutableArray *folderContent;
}

@end

@implementation DocumentsViewController

@synthesize fileList;

- (void)viewDidLoad
{
    [super viewDidLoad];

    folderContent = [[NSMutableArray alloc] init];
    fileManager = [[FileManager alloc] init];

    NSArray *items = [fileManager getDirectoryInfo];
    [self createFileList:items];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)createFileList:(NSArray *)items
{
    for(NSString *item in items)
    {
        NSInteger count = [folderContent count];
        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:count inSection:0];
        [folderContent insertObject:item atIndex:count];

        [self.fileList insertItemsAtIndexPaths:@[indexPath]];
    }
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    FilesViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"DefaultCell" forIndexPath:indexPath];

    cell.image.image = [UIImage imageNamed:@"folder.png"];
    cell.label.text = @"oi"; //objects[indexPath.row];

    return cell;
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return folderContent.count;
}

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
    return 1;
}

@end

提前致谢, 卢卡斯

更新

好的,所以在经过一些非常有用的提示后,我收到了另一条错误消息: 'NSInternalInconsistencyException',原因:'无效更新:第0节中的项目数无效。更新后现有部分中包含的项目数(1)必须等于更新前该部分中包含的项目数(1 ),加上或减去从该部分插入或删除的项目数量(插入1个,删除0个),加上或减去移入或移出该部分的项目数量(0移入,0移出)。“ p>

就像我下面说的那样,我可能正在使用(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)部分错误导致它连续两次被调用,没有给出时间来改变folderContent.count的值

1 个答案:

答案 0 :(得分:-1)

您是否真的想在创建列表时使用insertItemsAtIndexPath?这将使它们一次一个地制作动画。为什么不在for循环之后完全填充[self.fileList reloadData]?

另外我认为这条线可能会给你带来问题 - NSIndexPath *indexPath = [NSIndexPath indexPathForRow:count inSection:0];

您正在使用的集合视图没有与UITableViews相同的行(请注意indexPathForItem而不是indexPathForRow) NSIndexPath *indexPath = [NSIndexPath indexPathForItem:count inSection:0];