将行复制到UITableView中的另一个部分

时间:2013-07-26 10:33:59

标签: ios objective-c uitableview

我有一个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;
    }
}

2 个答案:

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