2

所以,我正在玩一些 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 移出)。

就像我在下面所说的那样,我可能正在使用 (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 错误,因为它被连续调用了两次,而没有给 folderContent.count 的值更改时间。

4

1 回答 1

-1

您真的想在创建列表时使用 insertItemsAtIndexPath 吗?这将导致它们一次动画化。为什么在 for 循环后完全填充 [self.fileList reloadData] 后不执行?

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

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

于 2013-03-12T05:02:29.077 回答