UITableViewController表在删除后不会刷新,但会在viewWillAppear上刷新

时间:2013-11-12 19:03:04

标签: ios objective-c uitableview

每个单元格都有一个按钮,一旦单击它就会从Parse后端删除每个单独的对象。我在块中成功时将其设置为reloadData,如下所示:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    PFRelation *relation = [self.currentUser relationforKey:@"watching"];
    [[relation query] findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
            if (error) {
            // There was an error
            } else {
               // NSLog(@"%@", objects);
                self.watchingEvents = objects;
                [self refreshTableView];
            }
    }];
}

-(IBAction) deleteButtonAction:(id) sender
{
    [SVProgressHUD showWithStatus:@"Removing from Watch List..."];

    PFRelation *relation = [self.currentUser relationforKey:@"watching"];
    [relation removeObject:self.selectedEvent];
    [self.currentUser saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
        if (error)
        {
            NSString *errorString = [[error userInfo] objectForKey:@"error"];
            UIAlertView *errorAlertView = [[UIAlertView alloc] initWithTitle:@"Error" message:errorString delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [errorAlertView show];
        }
        else
        {
            [SVProgressHUD showSuccessWithStatus:@"Removed from Watch List!"];
            [self refreshTableView];
        }
    }];
}
-(void)refreshTableView
{
    [self.tableView reloadData];
}

但它似乎没有更新tableView,单元格仍然显示(即使它已经消失,因为如果我离开并再次打开视图,viewWillAppear将被调用相同的reloadData功能和项目就像应该是这样。所以我知道功能正常工作,因为它显然在viewWillAppear工作。不知道为什么一旦块的成功运行它就不起作用,因为警报运行正常我输入的NSLog消息是什么?

3 个答案:

答案 0 :(得分:1)

将刷新方法更改为:

-(void)refreshTableView
{
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.tableView reloadData];
    });
}

答案 1 :(得分:0)

在删除,插入或移动操作之前需要先使用[tableView beginUpdates],然后在最后执行[tableView endUpdates]。

- (void)beginUpdates;
- (void)endUpdates;

https://developer.apple.com/Library/ios/documentation/UIKit/Reference/UITableView_Class/Reference/Reference.html#//apple_ref/occ/instm/UITableView/beginUpdates

答案 2 :(得分:0)

您正在从后端删除数据,但您没有从self.watchingEvents中删除该对象。我认为你必须使用self.watchingEvents来填充表格的cellForRowAtindex中的日期。请在删除时从self.watchingEvents中删除该对象,并解决您的问题。