我有一个tableView,其中包含一些部分,每个部分都有一些行。每行都有一个收藏夹。如果单击该按钮,该行应该添加到收藏夹部分。 (最初是空的)。
我已经编写了一些代码。但问题是它在iOS 5模拟器中运行并且在iOS 6模拟器中崩溃并且出现Invalid tableView更新错误。
有人可以告诉我问题出在哪里。?
-(void)moveRowToFavourites:(id)sender{
UIButton *button = (UIButton *)sender;
UITableViewCell *cell = (UITableViewCell *)button.superview.superview;
NSMutableArray *tempArray = [[NSMutableArray alloc] init];
[tempArray addObject:[NSIndexPath indexPathForRow:favouritesArray.count inSection:0]];
[favouritesArray insertObject:cell.textLabel.text atIndex:favouritesArray.count];
[[self tableView] beginUpdates];
[[self tableView] insertRowsAtIndexPaths:(NSArray *)tempArray withRowAnimation:UITableViewRowAnimationFade];
[[self tableView] endUpdates];
}
修改
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(searching){
return [self.searchResults count];
}
else{
if ([[arrayForBool objectAtIndex:section] boolValue]) {
if(section == 0){
return favouritesArray.count;
}else{
NSString* key = [self.proCategoriesArray objectAtIndex:section - 1];
NSArray *aArray = [sectionContentDict valueForKey:key];
return aArray.count;
}
}
return 1;
}
}
答案 0 :(得分:0)
您的数据源似乎返回0作为节和行的数量。您没有正确插入/删除行,当您插入新行时,数据源方法会再次被调用,例如,如果您尝试以行计数为4的方式插入对象,并且数据源{{1返回3,你得到一个例外,因为你正在尝试添加更多的数据源所承诺的对象。
当您尝试更新表视图时,将再次调用所有这些数据源方法:
tableView:numberOfRowsInSection:
您必须确保它们返回正确的值。我怀疑你甚至没有实现它们。
修改
问题是您只是在- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView;
- (UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*) indexPath;
中插入一个新对象,但这不会影响favouritesArray
返回的行数。在那里你没有返回tableView:numberOfRowsInSection:
,例外是由于favouritesArray.count
返回的数字低于表视图应该具有的行数。
在您的情况下,我认为您甚至不需要致电tableView:numberOfRowsInSection:
,您可以使用数据源执行所有操作:
insertRowsAtIndexPaths:
在-(void)moveRowToFavourites:(id)sender {
UIButton *button = (UIButton *)sender;
UITableViewCell *cell = (UITableViewCell *)button.superview.superview;
[favouritesArray insertObject:cell.textLabel.text atIndex:favouritesArray.count];
[[self tableView]reloadData];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return favouritesArray.count;
}
中,您应该返回一个以tableView:cellForRowAtIndexPath:
格式提取对象的单元格作为文本。
答案 1 :(得分:0)
您应该拨打以下电话:
[favouritesArray addObject:cell.textLabel.text];
[tableView reloadData];
确保您已实现此功能:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
switch(section){
case 0:
return favouritesArray.count;
//Your other sections have to placed here, too
default:
return 0;
}
}
然后你的tableView应该更新自己。问题是您插入了整个单元格,但您只需要在数组中插入数据。希望它有所帮助!