我集成GrabKit在我的iPhone應用程序,這是一個圖書館從社交網絡抓取照片。現在,我有以下的情況/問題:NSInternalInconsistencyException與UITableViewController和故事板流行
我有一個UITableViewController - AlbumListViewController。 然後還有一個UITableViewCell - AlbumCellViewController。 當你點擊其中一個單元格 - 包含照片的相冊 有一個UITableViewController - PhotoListViewController 和一個UITableViewCell - PhotoCellViewController。
這裏的一切工作只是finde,我可以瀏覽相冊,選擇一個,瀏覽其中的照片,然後當我選擇單張照片之一時,有一個PushViewController到我的SetPhotoViewController,它以全屏顯示所選圖像。
現在,當我想用我的導航欄的後退按鈕在SetPhotoViewController,以下消息的崩潰:我的兩個UITableViewControllers的
*** 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
數據源和代表都設置爲文件的所有者。
當我通過代碼調試時,我找不到任何特殊的東西,所有的照片都可以加載,所有的數組都充滿了數據,沒有什麼奇怪的。
這裏是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,第二個時間的方法被調用,解析度是等於。
- (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;
}
我們真正需要看到的是'我聯繫 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section' – CodaFi
添加了上面的方法,謝謝你,@CodaFi :) – NthDegree