0

所以我有一个按钮,UITableView可以打开和关闭过滤器,按被BOOL调用的isLiked. 我可以显示所有结果,或者只显示指定为喜欢的结果。我可以点击任何单元格并进入一个详细信息页面,我可以在其中BOOL打开或关闭它。

如果我在点赞列表中并且我点击了一个,然后将其收藏状态关闭,然后再次返回到点赞过滤,它并没有消失。如果我关闭并再次打开过滤器,该条目就会消失。

我希望在我退出该视图后立即进行更改,而不是需要打开和关闭过滤器才能使其生效。我怎样才能做到这一点?一些相关代码如下:

这是我打开和关闭过滤器时调用的方法:

- (IBAction) filterLiked: (id) sender
{
    if (isDisplayingLiked) {
        // Revert to the predicate that only removes disliked entries.
        [_fetchRequest setPredicate: [NSPredicate predicateWithFormat: @"isDisliked == 0"]];
        NSError *error;
        if (![self.fetchedResultsController performFetch: &error]) NSLog(@"Unresolved error %@, %@", error, [error userInfo]);

        // Update the tableView and update state variables.
        [self.tableView reloadData];
        isDisplayingLiked = NO;
        [_showLikedButton setTitle: @"Liked"];

    } else {
        // Revert to the predicate that only shows liked entries.
        [_fetchRequest setPredicate: [NSPredicate predicateWithFormat:@"isLiked == 1"]];
        NSError *error;
        if (![self.fetchedResultsController performFetch: &error]) NSLog(@"Unresolved error %@, %@", error, [error userInfo]);

        // Update the tableView and update state variables.
        [self.tableView reloadData];
        isDisplayingLiked = YES;
        [_showLikedButton setTitle: @"All"];
    }
}

这是我在详细视图中打开或关闭“喜欢”状态时调用的代码:

- (IBAction) changeLikedSwitch: (id) sender
{
    UISwitch *likedSwitch = (UISwitch *) sender;
    if ([likedSwitch isOn]) {
        [_selectedQuote setIsLiked: [NSNumber numberWithBool: YES]];
    } else {
        [_selectedQuote setIsLiked: [NSNumber numberWithBool: NO]];
    }

    NSError *error;
    if (![[[CDManager sharedManager] managedObjectContext] save:&error]) NSLog(@"Saving changes failed: %@, %@", error, [error userInfo]);
}

如果您需要更多代码,请告诉我。

4

1 回答 1

0

从详细视图返回后,您需要重新加载表视图的数据。

一种常见的技术是使用委托。使表视图控制器成为详细视图控制器的委托。然后,在详细视图控制器中viewWillDisappear:,您可以调用委托的reloadData方法。

于 2013-02-26T11:19:42.823 回答