gpt4 book ai didi

objective-c - 带有 UITableViewController 和 Storyboard-Pop 的 NSInternalInconsistencyException

转载 作者:行者123 更新时间:2023-11-28 18:39:33 29 4
gpt4 key购买 nike

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

我有一个 UITableViewController - AlbumListViewController。然后是一个 UITableViewCell - AlbumCellViewController。当您点击其中一个单元格时 - 带有照片的相册有一个 UITableViewController - PhotoListViewController和一个 UITableViewCell - PhotoCellViewController。

这里一切正常,我可以浏览相册,选择一个,浏览其中的照片,然后当我选择其中一张照片时,我的 SetPhotoViewController 有一个 PushViewController,它以全屏显示所选图像。

现在,当我想在 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

我的两个 UITableViewControllers 的 DataSource 和 Delegate 都设置为 File's Owner。

我调试代码的时候,没发现什么特别的东西,所有的照片都能加载,所有的数组都填满了数据,没什么奇怪的。

这是 PhotoListViewController 的两个函数,当我按下 NavigationController 上的后退按钮时,它们会立即被调用:

(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 方法的代码:如果我调试它,第一次 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 中的 Controller 仅用于演示目的,它们并非设计为在项目中“按原样”使用,更具体地说:GRKDemoPhotosList Controller 并未将另一个 Controller 推送到 Controller 层次结构中.

所以你需要的只是一个小的修复来让 grabKit demo 的 Controller 适合你的项目:)

我猜问题如下:

_ 在 [GRKDemoPhotosList viewWillAppear] 中,调用了方法 fillAlbumWithMorePhotos。

_ 当您从 Controller 弹出回到 GRKDemoPhotosList 时,会再次调用此方法,并生成此错误。

尝试在 viewWillAppear 方法中添加一个标志,以避免调用 fillAlbumWithMorePhotos 两次,我想它会工作正常。

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

关于objective-c - 带有 UITableViewController 和 Storyboard-Pop 的 NSInternalInconsistencyException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13019853/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com