Ios UITableViewController表赢得';删除后不刷新,但将在视图上刷新

Ios UITableViewController表赢得';删除后不刷新,但将在视图上刷新,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我为每个单元格都有一个按钮,一旦单击它,就会从解析后端删除每个单独的对象。在块中成功后,我将其设置为reloadData,如下所示: - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; PFRelation *relation = [self.currentUser relationforKey:@"watching"]; [[relation query] findObject

我为每个单元格都有一个按钮,一旦单击它,就会从解析后端删除每个单独的对象。在块中成功后,我将其设置为
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,单元格仍然显示(即使它消失了,因为如果我离开并再次打开视图,
视图将出现
,调用的是相同的
重载数据
函数,项目也会像它应该的那样消失。因此,我知道这些函数在工作,因为它显然在
视图中工作,将出现
。不确定在块运行时,警报和我输入的任何NSLog消息运行正常?

将刷新方法更改为:

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

在执行删除、插入或移动操作之前,需要使用[tableView BeginUpdate],然后在最后使用[tableView EndUpdate]

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

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

我猜您是从self.watchingEvents重新填充表。如果没有,请显示CellForRowatinex方法以进行调试。它正在处理ViewWillDisplay,因为您使用后端中的数据更新self.watchingEvents,因此当您删除对象并执行ViewWillDisplay时,self.watchingEvents将从后端更新(现在没有已删除的对象)。因此,您可以在表中获得正确的数据。Hrm不确定我将如何修复它,您是对的。我正在使用[self.watchingEvents count]填充表。我只是在调用[self.tableView reloadData]时认为它正在刷新表,因此检查[self.watchingEvents count]同样,没有?我想我通过将数组更改为NSMutableArray并简单地调用[self.watchingEvents removeObject:self.selectedEvent]解决了这个问题;,谢谢!它似乎可以工作,但现在我收到警告说,将在视图中显示从NSArray分配给NSMutableArray的不兼容指针类型。我可以看到它在说什么,但如何解决这个问题?我无法将NSArray更改为NSMutableArray而不出错,如果我将其更改回NSArray,它将不允许我删除对象设想它不再是NSMutable------编辑:通过将其更改为self.watchingEvents=[[NSMutableArray alloc]initWithArray:objects]来修复它;