所以,我正在玩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的值
答案 0 :(得分:-1)
您是否真的想在创建列表时使用insertItemsAtIndexPath?这将使它们一次一个地制作动画。为什么不在for循环之后完全填充[self.fileList reloadData]?
另外我认为这条线可能会给你带来问题 -
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:count inSection:0];
您正在使用的集合视图没有与UITableViews相同的行(请注意indexPathForItem而不是indexPathForRow)
NSIndexPath *indexPath = [NSIndexPath indexPathForItem:count inSection:0];