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

詳細ビューから戻ったらすぐに、テーブルビューのデータをリロードする必要があります。

一般的な手法の1つは、委任を使用することです。テーブルビューコントローラを詳細ビューコントローラのデリゲートにします。次に、詳細ビューコントローラで、デリゲートのメソッドviewWillDisappear:を呼び出すことができます。reloadData

于 2013-02-26T11:19:42.823 に答える