我已經得到了我想要插入在刪除行一個UITableView。初始化用「插入」行一個UITableView
如果我有10個值的數組,與實現代碼如下,包括所有行,表格開始顯示正常。然後,如果我想過濾除[0,1,5]以外的所有內容。然後,我通過在索引路徑刪除行的過程:[2,3,4,6,7,8,9]和返回的行數是3.我不必更改我的單元格渲染代碼,它顯示行:[0,1,5]。但是,如果在過濾了所有內容之後,我想回到該表並從持久性加載行[0,1,5]的表,我遇到了麻煩。該表加載的行數爲3,並呈現單元格:[0,1,2]。
我已經試過初始化在viewDidLoad中的表0行,然後在viewDidAppear調用insertRows:0,1,5] - 但這將引發異常:
*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-2380.17/UITableView.m:909
而且我驗證過在viewDidLoad中,行數正在打印0,並且在引發此錯誤之前,打印的行數是3.
編輯 如果我插入[0,1,2],它會工作...但是再一次......我最終需要[0,1,5]出現。
- (void) viewDidAppear:(BOOL) animated { [super viewDidAppear:animated]; NSArray *initializing_indeces = @[[NSIndexPath indexPathForRow:0 inSection:0], [NSIndexPath indexPathForRow:1 inSection:0], [NSIndexPath indexPathForRow:5 inSection:0]]; [self.userDataTable insertRowsAtIndexPaths:initializing_indeces withRowAnimation:UITableViewRowAnimationAutomatic]; }
- (int) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Using different booleans, but the gist: if (viewDidLoad) return 0; if (viewDidAppear || filtered) return 3; if (expanded) return 10; }
- (UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CELL"]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CELL"]; } [cell.textLabel setText:[NSString stringWithFormat:@"%i",indexPath.row]]; return cell; }
放在這裏relavent代碼:) – iPatel 2013-02-12 04:20:41
好看到這些鏈接並檢查: http://stackoverflow.com/questions/6241625/getting-an-assertion-failure-error&也是這個 的http://計算器.com/questions/10134841/assertion-failure-in-uitableview-endcellanimationswithcontext – Vishal 2013-02-12 04:23:06
在numberOfRowsInSection你應該給10行..並且complite any oparation write [tableView reloadData]; – iPatel 2013-02-12 04:44:21