2013-03-12 2 views
1

Итак, я немного поиграл с программированием на iOS. У меня мало времени, но я откладываю, чтобы узнать это слишком долго. Но я застрял в течение 2 дней с этой проблемой. Я получаю следующую ошибку, когда я пытаюсь добавить ячейки в свой CollectionView.iOS CollectionView 'NSInternalInconsistencyException'

'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 

Спасибо продвижение, Lucas

UPDATE

Итак, аф несколько несколько ОЧЕНЬ полезных советов, я получил еще одно сообщение об ошибке: «NSInternalInconsistencyException», причина: «Неверное обновление: недопустимое количество элементов в разделе 0. Количество элементов, содержащихся в существующем разделе после обновления (1), должно быть равным к числу элементов, содержащихся в этом разделе перед обновлением (1), плюс или минус количество элементов, вставленных или удаленных из этого раздела (1 вставлено, 0 удалено) и плюс или минус количество элементов, перемещенных в или из этого раздел (0 перемещен, 0 перемещен). '

Как я уже сказал ниже, я мог бы использовать (NSInteger) collectionView: (UICollectionView *) collectionView numberOfItemsInSection: (NSInteger) раздел неправильно, потому что он вызывается дважды подряд, не давая времени для значения folderContent.count для изменение.

+0

Вы уверены, что 'self.fileList.dataSource' установлен в' self'? Поместите точки останова в 'createFileList:' и 'collectionView: numberOfItemsInSection:'. Убедитесь, что на обеих точках останова 'self' и' folderContent' установлены одинаковые (не-nil) значения. –

+0

Я исправил то, что Шон сказал не так, а также исправил некоторые проблемы с привязкой, и теперь ошибка изменилась. Итак, я отлаживал приложение. collectionView: numberOfItemsInSection вызывается дважды, и оба раза возвращаемое значение (folderContent.count) равно 1, что приводит к сбою приложения. Я думаю, что я, возможно, не получаю правильный путь к стеку приложений ... –

ответ

-1

Вы действительно хотите использовать insertItemsAtIndexPath при создании своего списка? Это заставит их оживить по одному за раз. Почему бы не сделать [self.fileList reloadData] после того, как он полностью заполнен после цикла for?

Кроме того, я думаю, что эта линия может давать вам вопросы - NSIndexPath *indexPath = [NSIndexPath indexPathForRow:count inSection:0];

Вы используете вид коллекции, который не имеет строк в том же смысле, как UITableViews (обратите внимание на indexPathForItem вместо indexPathForRow) NSIndexPath *indexPath = [NSIndexPath indexPathForItem:count inSection:0];

+0

Ну, это было на самом деле неправильно. Но я обновился до indexPathForItem, и теперь у меня другая проблема. Кроме того, я просто обманываю код. Я проверю reloadData на более позднем этапе. благодаря –

Смежные вопросы