2

我有一个带有一些部分的 tableView,每个部分都有一些行。每一行都有一个收藏按钮。如果单击该按钮,该行应该被添加到收藏夹部分。(最初是空的)。

我已经编写了一些代码。但问题是它在 iOS 5 模拟器中工作并且在 iOS 6 模拟器中因无效 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;
    }
}
4

2 回答 2

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 应该更新自己。问题是您插入了整个单元格,但您只需在数组中插入数据。希望能帮助到你!

于 2013-07-26T11:26:19.567 回答
0

您的数据源似乎返回 0 作为部分和行数。您没有正确插入/删除行,当您插入新行时,数据源方法会再次被调用,例如,如果您尝试以行数为 4 的方式插入对象,并且数据源tableView:numberOfRowsInSection:返回 3,你得到一个例外,因为你正在尝试添加更多数据源承诺的对象。

当您尝试更新表视图时,所有这些数据源方法都会再次被调用:

- (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:您应该返回一个单元格,该单元格具有以favouritesArray文本形式获取的对象。

于 2013-07-26T11:08:44.770 回答