关于UITableView的一些新的认识

最近用UITableView的reloadRowsAtIndexPaths:withRowAnimation:更新数据时两次遇到了下面的问题

2013-01-20 11:37:16.237 TingBook[4513:c07] *** Assertion failure in
-[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-2372/
UITableView.m:1070 2013-01-20 11:37:16.238 TingBook[4513:c07] *** Terminating app
due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid
update: invalid number of rows in section 0. The number of rows contained in an
existing section after the update (0) must be equal to the number of rows contained
 in that section before the update (11), plus or minus the number of rows inserted
 or deleted from that section (0 inserted, 3 deleted) and plus or minus the number
of rows moved into or out of that section (0 moved in, 0 moved out).'
*** First throw call stack:
(0x17ef012 0x15f3e7e 0x17eee78 0x1089f35 0x5dcb8d 0x5e9846 0x5e98c1 0x2532d 0x1607705
 0x53e920 0x53e8b8 0x5ff671 0x5ffbcf 0x5fed38 0x56e33f 0x56e552 0x54c3aa 0x53dcf8
0x2851df9 0x2851ad0 0x1764bf5 0x1764962 0x1795bb6 0x1794f44 0x1794e1b 0x28507e3
0x2850668 0x53b65c 0x1ff5 0x1ef5 0x1)
libc++abi.dylib: terminate called throwing an exception

大体意思就是UITableView里的数据源更新完以后,数据源和要增加减少的数据不一致。
这次遇到的问题:数据源的数组里保存的Object是一样的。

[dataListArray addObject:@"aaa"];
[dataListArray addObject:@"aaa"];
[dataListArray addObject:@"aaa"];
[dataListArray addObject:@"aaa"];
[dataListArray addObject:@"aaa"];

这样当你[dataListArray removeObject:@”aaa”]时,会出现意想不到的问题。
上次遇到的问题:Section里的number数写死了。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  return 10;
  //return dataListArray.count;
}

另外一个小发现就是:原来当你启用多选的时候,你选中的Cell,UITableViw会自动帮你保存IndexPath到一个数组:

[dataListTableView indexPathsForSelectedRows]

这样你就可以一下子拿到当前选中的Cell

[dataListTableView visibleCells];
[dataListTableView indexPathsForVisibleRows];

看来已经自认为用的很熟的东西,懂的还不是那么透彻~

    分享到:

About rainbird

IOS攻城狮
This entry was posted in IOS开发 and tagged , , , . Bookmark the permalink.

发表评论