NsinternalInconSistencyException带有UITATION VIEWCONTROLLER和故事



i在我的iPhone应用中集成了grabkit,这是一个可以从社交网络中获取照片的库。现在我有以下情况/问题:

我有一个UITATION VIEWCONTROLLER -COMPORLISTVIEWCONTROLLER。然后是一个UitaiteViewCell -COMPERCELLVIEWCONTROLLER。当您点击这些单元格之一 - 带照片的专辑有一个UitaiteViewController -PhotolistViewController和一个UitaiteViewCell -PhotocellViewController。

这里的一切都可以找到,我可以浏览专辑,选择一张,浏览其中的照片,然后当我选择其中一张照片时,我的setViewController在我的setPhotoviewController上,它以全屏显示所选图像。<<<<<<<<<<<<<<<<<<<<<<

现在,当我想在setPhotoviewController中使用导航栏的后按钮时,带有以下消息的崩溃:

*** Assertion failure in -[UISectionRowData refreshWithSection:tableView:tableViewRowData:], /SourceCache/UIKit_Sim/UIKit-2372/UITableViewRowData.m:400
2012-10-22 22:49:32.814 Amis[1820:c07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Failed to allocate data stores for 1073741821 rows in section 1. Consider using fewer rows'
*** First throw call stack:
(0x23de012 0x1b63e7e 0x23dde78 0x15f9f35 0xc8f83b 0xc923c4 0xb56fa2 0xb5692c 0x1690f 0x1cd653f 0x1ce8014 0x1cd87d5 0x2384af5 0x2383f44 0x2383e1b 0x2a9a7e3 0x2a9a668 0xaab65c 0x42fd 0x2b75)
libc++abi.dylib: terminate called throwing an exception

我两个Uaite ViewControllers的数据源和委托都设置为File的所有者。

当我调试代码时,我找不到任何特殊的东西,所有照片都可以加载,所有阵列都充满了数据,没有什么奇怪的。

这是PhotolistViewController的两个功能,一旦我按下导航controller上的后退按钮:

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = nil;
    NSLog(@"%i", indexPath.row);
    NSLog(@"%ii", indexPath.section);
    // Extra Cell
    if ( indexPath.section > _lastLoadedPageIndex ){    
        static NSString *extraCellIdentifier = @"ExtraCell";
        cell = [tableView dequeueReusableCellWithIdentifier:extraCellIdentifier];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:extraCellIdentifier];
        }
        cell.textLabel.text = @"load more";
        cell.textLabel.font = [UIFont fontWithName:@"System" size:8];

    } else {
        static NSString *photoCellIdentifier = @"photoCell";
        cell = [tableView dequeueReusableCellWithIdentifier:photoCellIdentifier];
        if (cell == nil) {
            cell = [[[NSBundle mainBundle] loadNibNamed:@"PhotoRowViewController" owner:self options:nil] objectAtIndex:0];
        }

    }    
    // setting of the cell is done in method [tableView:willDisplayCell:forRowAtIndexPath:]
    return cell;
}

和..

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    // extra cell
    if ( [cell.reuseIdentifier isEqualToString:@"ExtraCell"] ){ 
        if ( state == GRKDemoPhotosListStateAllPhotosGrabbed ) {
            cell.textLabel.text = [NSString stringWithFormat:@" %d photos", [[_album photos] count] ];
        }else {
            cell.textLabel.text = [NSString stringWithFormat:@"Loading page %d", _lastLoadedPageIndex+1];
            [self fillAlbumWithMorePhotos];
        }

    } else  // Photo cell
    {
        NSArray * photosAtIndexPath = [self photosForCellAtIndexPath:indexPath];
       [(PhotoRowViewController*)cell setPhotos:photosAtIndexPath];

    }
}

我想念什么?

编辑:numberOfrowsInsection-method的代码:如果我调试它,第一次res等于0,第二次被调用,res等于 322121535

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    NSUInteger res = 0;
    if ( state == GRKDemoPhotosListStateAllPhotosGrabbed && section == _lastLoadedPageIndex ) {
        NSUInteger photosCount = [_album count];
        // Number of cells with kNumberOfPhotosPerCell photos 
        NSUInteger numberOfCompleteCell = (photosCount - section*kNumberOfRowsPerSection*kNumberOfPhotosPerCell) / kNumberOfPhotosPerCell;
        // The last cell can contain less than kNumberOfPhotosPerCell photos
        NSUInteger thereIsALastCellWithLessThenFourPhotos = (photosCount % kNumberOfPhotosPerCell)?1:0;
        // always add an extra cell
        res =  numberOfCompleteCell + thereIsALastCellWithLessThenFourPhotos  +1 ;

    } else if ( section > _lastLoadedPageIndex) {
        // extra cell
        res = 1;
    } else res = kNumberOfRowsPerSection;

    return res;
}

我是grabkit的开发人员。感谢您使用它:)

实际上,GrabKit中的控制器仅出于演示目的而设计,而不是被设计为项目中的"原样",更具体地说:GRKDEMOPHOTOSLIST控制器并没有使Controler层次结构中的另一个控制器推入另一个控制器。。

因此,您需要的只是使GrabKit演示的控制器适合您的项目的一些修复:)

我想问题是以下:

_在[grkdemophotoslist viewWillAppear]中,称为fillalbumwithmorephotos。

_当您从控制器弹出到Grkdemophotoslist时,此方法被称为一次,并且会生成此错误。

尝试在ViewWillAppear方法中添加标志,以避免两次调用fillalbumwithmorephotos,我想它可以正常工作。

如果您需要更多信息或帮助,请随时通过邮件(pierre.olivier.simonard在gmail.com上)或Twitter(@pierrotsmnrd)与我联系:)

相关内容

  • 没有找到相关文章

最新更新