从详细信息视图返回时,反映对NSFetchedResultsController结果的更改?

时间:2013-02-26 11:06:38

标签: objective-c uitableview core-data nsfetchedresultscontroller reloaddata

所以我的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]);
}

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

1 个答案:

答案 0 :(得分:0)

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

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