0

空のセクションが 1 つと、オブジェクトでいっぱいの他のセクションがあります。すべての行にボタンがあります。行のボタンをクリックすると、行は空のセクションに移動するはずです。

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid table view update.  The application has requested an update to the table view that is inconsistent with the state provided by the data source.'

次のコードを試しました。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
if ([[arrayForBool objectAtIndex:section] boolValue]) {
    if(section == 0){
        return favouritesArray.count;
    }else{
    NSString* key = [sectionTitleArray objectAtIndex:section - 1];
    NSArray *aArray = [sectionContentDict valueForKey:key];
    return aArray.count;
    }
}
return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *cellIdentifier = @"UCPMenuCellIdentifier";
UCPCategoryListCell *cell = (UCPCategoryListCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
    cell = [[[UCPCategoryListCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]autorelease];
}


if(indexPath.section == 0){
    cell.textLabel.text = [favouritesArray objectAtIndex:indexPath.row ];
}
else{
NSString* key = [sectionContentDict.allKeys objectAtIndex:indexPath.section - 1];
BOOL manyCells  = [[arrayForBool objectAtIndex:indexPath.section] boolValue];

if (!manyCells) {
    cell.textLabel.text = @"click to enlarge";
}
else{
    cell.textLabel.text = [[sectionContentDict objectForKey:key] objectAtIndex:indexPath.row];
}
}

UIButton *deletebtn=[UIButton buttonWithType:UIButtonTypeRoundedRect];
deletebtn.frame=CGRectMake(220, 10, 20, 20);
[deletebtn addTarget:self action:@selector(moveRowToFavorites:) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:deletebtn];

return cell;
}


-(void)moveRowToFavorites:(id)sender{
 UIButton *button = (UIButton *)sender;
UITableViewCell *cell = (UITableViewCell *)button.superview.superview;
    [self.aTableView beginUpdates];
    [favouritesArray addObject:cell.textLabel.text];
    NSIndexPath *newindexPath = [NSIndexPath indexPathForRow:[favouritesArray count] inSection:0];
     NSIndexPath *oldindexPath = [self.aTableView indexPathForCell:cell];
    [self.aTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:oldindexPath] withRowAnimation:UITableViewRowAnimationFade];
    [self.aTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newindexPath] withRowAnimation:UITableViewRowAnimationRight];
    [self.aTableView endUpdates];


}
4

3 に答える 3

1

moveRowToFavorites メソッドで配列を変更します (favoritesArray および sectionContentDict)。favouritesArray に追加しました。他の配列から同じオブジェクトを削除します。次に、テーブル reloadData を呼び出します。これを試して。お気に入りセクションに追加されます。

-(void)moveRowToFavorites:(id)sender{
UIButton *button = (UIButton *)sender;
UITableViewCell *cell = (UITableViewCell *)button.superview.superview;

    [favouritesArray addObject:cell.textLabel.text];
    //here you need to delete same object from [sectionContentDict objectForKey:key] 
    [self.aTableView reloadData];
}

insertRowsAtIndexPathsまたはのようなことはしないでくださいdeleteRowsAtIndexPaths

于 2013-06-14T12:47:52.027 に答える
1

次のような moveRowToFavorites: メソッドを試してください。

- (void) moveRowToFavorites: (id) sender
{
    UIButton* button = (UIButton*) sender;
    UITableViewCell* cell = (UITableViewCell*) button.superview.superview;
    [self.aTableView beginUpdates];
    [favouritesArray addObject: cell.textLabel.text];

    NSIndexPath* newindexPath = [NSIndexPath indexPathForRow: [favouritesArray count] - 1
                                                   inSection: 0];
    [self.aTableView insertRowsAtIndexPaths: [NSArray arrayWithObject: newindexPath]
                          withRowAnimation: UITableViewRowAnimationRight];

    NSIndexPath* oldindexPath = [self.aTableView indexPathForCell: cell];
    [self.aTableView deleteRowsAtIndexPaths: [NSArray arrayWithObject: oldindexPath]
                          withRowAnimation: UITableViewRowAnimationFade];

    NSInteger oldSection = oldindexPath.section;
    NSInteger oldRow = oldindexPath.row;
    NSString* key = [sectionTitleArray objectAtIndex: oldSection - 1];
    NSMutableArray* anArray = [NSMutableArray arrayWithArray: [sectionContentDict valueForKey: key]];
    [anArray removeObjectAtIndex: oldRow];
    [sectionContentDict setValue: anArray forKey: key];

    [self.aTableView endUpdates];
}

このコードでプロジェクトを作成しました。正常に動作しています。あなたが必要なら、私は与えることができます。私のコードがお役に立てば幸いです。

于 2013-06-14T18:42:00.477 に答える
0

-(void)moveRowToFavorites:(id)senderオブジェクトを に追加した後、favouritesArray内の配列からオブジェクトを削除する必要がありますsectionContentDict。そして、begin-end Updates の後に [table reloadData] を使用する必要はありません。

于 2013-06-14T12:50:31.960 に答える