如果我有一个包含4行的UITableView,那么当我导航到该视图时,不应该调用4次cellForRowAtIndexPath方法吗?我发现它被多次调用,例如如果有4行,当我深入到UITable视图时会被调用8次,然后当我导航回到同一个UITableView时被调用12次.
我只是误解了这种方法的工作原理吗?我认为应该为显示的每一行调用一次(没有涉及滚动,因为表格视图的内容很容易适合我的iPad屏幕).
我应该注意到UITableView包含在iPad上的UISplitViewController的MasterViewController中.
编辑:我得到的真正问题是以下代码的应用方式不一致:
if (selectednavItem.folder.isAssignedToUser != [NSNumber numberWithInt:1]) { NSLog(@"%@",cell.textLabel.text); cell.selectionStyle = UITableViewCellSelectionStyleNone; cell.userInteractionEnabled = NO; cell.textLabel.enabled = NO; cell.detailTextLabel.text = @"Access not granted"; cell.detailTextLabel.enabled = NO; }
当我第一次“深入”到我的导航堆栈的特定级别时,事情就像他们应该的那样工作.但是后来如果我向上或向下导航,我发现各行被错误地处理,即当它们应该被启用时它们最终会被禁用.这导致我提出了一个断点和一些日志代码来试图找出发生了什么.我发现上面的代码被调用的次数比行数多 – 而且我记录的cell.textLabel.text值没有意义 – 同一行的值被多次记录 – 而其他行则没有记录在一起.
编辑:根据要求提供一些代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static Nsstring *CellIdentifier = @"FolderCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; [self configureCell:cell atIndexPath:indexPath]; return cell; } - (NSFetchedResultsController *)fetchedResultsController { if (__fetchedResultsController != nil) { return __fetchedResultsController; } // Set up the fetched results controller. // Create the fetch request for the entity. NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; // Edit the entity name as appropriate. NSEntityDescription *entity = [NSEntityDescription entityForName:@"NavItem" inManagedobjectContext:self.managedobjectContext]; [fetchRequest setEntity:entity]; // Set the batch size to a suitable number. [fetchRequest setFetchBatchSize:20]; // Edit the sort keys as appropriate. NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"sortOrder" ascending:YES]; NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]; NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor1,sortDescriptor2,nil]; [fetchRequest setSortDescriptors:sortDescriptors]; // Edit the section name key path and cache name if appropriate. // nil for section name key path means "no sections". NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedobjectContext:self. managedobjectContext sectionNameKeyPath:nil cacheName:@"Master"]; aFetchedResultsController.delegate = self; self.fetchedResultsController = aFetchedResultsController; NSError *error = nil; if (![self.fetchedResultsController performFetch:&error]) { /* Replace this implementation with code to handle the error appropriately. abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application,although it may be useful during development. */ NSLog(@"Unresolved error %@,%@",error,[error userInfo]); abort(); } return __fetchedResultsController; } - (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath { NSManagedobject *managedobject = [self.fetchedResultsController objectAtIndexPath:indexPath]; NavItem *selectednavItem = (NavItem *)managedobject; cell.textLabel.text = [[managedobject valueForKey:@"name"] description]; cell.detailTextLabel.text = @""; if (selectednavItem.folder != nil) { cell.imageView.image = [UIImage imageNamed:@"Folder.png"]; //NSLog(@"%@",selectednavItem.folder.isAssignedToUser); if (selectednavItem.folder.isAssignedToUser != [NSNumber numberWithInt:1]) { NSLog(@"%@",cell.textLabel.text); cell.selectionStyle = UITableViewCellSelectionStyleNone; cell.userInteractionEnabled = NO; cell.textLabel.enabled = NO; cell.detailTextLabel.text = @"Access not granted"; cell.detailTextLabel.enabled = NO; } } else if (selectednavItem.document != nil) { cell.detailTextLabel.text = [[selectednavItem.document valueForKey:@"itemDescription"] description]; if ([[selectednavItem.document.fileName pathExtension] isEqualToString:@"pdf"]) { cell.imageView.image = [UIImage imageNamed:@"pdf.png"]; } else if ([[selectednavItem.document.fileName pathExtension] isEqualToString:@"doc"] || [[selectednavItem.document.fileName pathExtension] isEqualToString:@"docx"]) { cell.imageView.image = [UIImage imageNamed:@"Word-32x32.png"]; } else if ([[selectednavItem.document.fileName pathExtension] isEqualToString:@"xls"] || [[selectednavItem.document.fileName pathExtension] isEqualToString:@"xlsx"]) { cell.imageView.image = [UIImage imageNamed:@"Excel-32x32.png"]; } else if ([[selectednavItem.document.fileName pathExtension] isEqualToString:@"ppt"] || [[selectednavItem.document.fileName pathExtension] isEqualToString:@"pps"]) { cell.imageView.image = [UIImage imageNamed:@"Powerpoint-32x32.png"]; } else if ([[selectednavItem.document.fileName pathExtension] isEqualToString:@"mp3"] || [[selectednavItem.document.fileName pathExtension] isEqualToString:@"wav"]) { cell.imageView.image = [UIImage imageNamed:@"65-note.png"]; } else if ([[selectednavItem.document.fileName pathExtension] isEqualToString:@"mp4"] || [[selectednavItem.document.fileName pathExtension] isEqualToString:@"mov"]) { cell.imageView.image = [UIImage imageNamed:@"46-movie-2.png"]; } else if ([[selectednavItem.document.fileName pathExtension] isEqualToString:@"ibooks"]) { cell.imageView.image = [UIImage imageNamed:@"ibooks-icon.png"]; } else if ([[selectednavItem.document.fileName pathExtension] isEqualToString:@"png"] || [[selectednavItem.document.fileName pathExtension] isEqualToString:@"bmp"] || [[selectednavItem.document.fileName pathExtension] isEqualToString:@"jpg"] || [[selectednavItem.document.fileName pathExtension] isEqualToString:@"jpeg"] || [[selectednavItem.document.fileName pathExtension] isEqualToString:@"tif"] || [[selectednavItem.document.fileName pathExtension] isEqualToString:@"tiff"] || [[selectednavItem.document.fileName pathExtension] isEqualToString:@"gif"]) { cell.imageView.image = [UIImage imageNamed:@"41-picture-frame.png"]; } else { cell.imageView.image = [UIImage imageNamed:@"179-notepad.png"]; } } else if (selectednavItem.attachment != nil) { cell.detailTextLabel.text = [[selectednavItem.attachment valueForKey:@"itemDescription"] description]; if ([[selectednavItem.attachment.fileName pathExtension] isEqualToString:@"pdf"]) { cell.imageView.image = [UIImage imageNamed:@"pdf.png"]; } else if ([[selectednavItem.attachment.fileName pathExtension] isEqualToString:@"doc"] || [[selectednavItem.attachment.fileName pathExtension] isEqualToString:@"docx"]) { cell.imageView.image = [UIImage imageNamed:@"Word-32x32.png"]; } else if ([[selectednavItem.attachment.fileName pathExtension] isEqualToString:@"xls"] || [[selectednavItem.attachment.fileName pathExtension] isEqualToString:@"xlsx"]) { cell.imageView.image = [UIImage imageNamed:@"Excel-32x32.png"]; } else if ([[selectednavItem.attachment.fileName pathExtension] isEqualToString:@"ppt"] || [[selectednavItem.attachment.fileName pathExtension] isEqualToString:@"pps"]) { cell.imageView.image = [UIImage imageNamed:@"Powerpoint-32x32.png"]; } else if ([[selectednavItem.attachment.fileName pathExtension] isEqualToString:@"mp3"]) { cell.imageView.image = [UIImage imageNamed:@"65-note.png"]; } else if ([[selectednavItem.attachment.fileName pathExtension] isEqualToString:@"mp4"]) { cell.imageView.image = [UIImage imageNamed:@"46-movie-2.png"]; } else if ([[selectednavItem.document.fileName pathExtension] isEqualToString:@"ibooks"]) { cell.imageView.image = [UIImage imageNamed:@"ibooks-icon.png"]; } else if ([[selectednavItem.attachment.fileName pathExtension] isEqualToString:@"png"] || [[selectednavItem.attachment.fileName pathExtension] isEqualToString:@"bmp"] || [[selectednavItem.attachment.fileName pathExtension] isEqualToString:@"jpg"] || [[selectednavItem.attachment.fileName pathExtension] isEqualToString:@"jpeg"] || [[selectednavItem.attachment.fileName pathExtension] isEqualToString:@"tif"] || [[selectednavItem.attachment.fileName pathExtension] isEqualToString:@"tiff"] || [[selectednavItem.attachment.fileName pathExtension] isEqualToString:@"gif"]) { cell.imageView.image = [UIImage imageNamed:@"41-picture-frame.png"]; } else { cell.imageView.image = [UIImage imageNamed:@"179-notepad.png"]; } } }
解决方法
原文地址:https://www.jb51.cc/iOS/328910.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。