0

그래서 UITableView에있는 BOOL에 의해 필터링되는 필터를 켜고 끄는 버튼이 isLiked이라고합니다. 모든 결과를 표시하거나 좋아하는 것으로 지정된 결과 만 표시 할 수 있습니다. 모든 셀을 탭하고 세부 페이지로 이동하여 BOOL을 켜거나 끌 수 있습니다.상세보기에서 돌아 오면 NSFetchedResultsController 결과의 변경 내용을 반영 하시겠습니까?

내가 좋아하는 목록에 있고 탭 하나를 누른 다음 즐겨 찾기 상태를 끈 다음 좋아하는 것으로 돌아 가기 - 다시 한 번 필터링하면 사라지지 않았습니다. 필터를 껐다가 다시 켜면 항목이 사라집니다.

필자는 필터를 켜고 끄기 위해 필터를 켜고 끄기보다는 그 시점에서 돌아 오자마자 변경 사항을 적용하고 싶습니다. 어떻게하면 될까요? 일부 관련 코드는 다음과 같습니다 :

다음
- (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]); 
} 

더 많은 코드가 필요하면 알려 주시기 바랍니다.

답변

0

상세보기에서 돌아 오는 즉시 테이블보기의 데이터를 다시로드해야합니다.

한 가지 일반적인 기술은 위임을 사용하는 것입니다. 테이블 뷰 컨트롤러를 상세 ​​뷰 컨트롤러의 대리자로 만듭니다. 그런 다음 세부보기 컨트롤러 viewWillDisappear:에서 대리자의 reloadData 메서드를 호출 할 수 있습니다.

+0

델리게이트 추가를 시도했지만, 그 시점에서 테이블에서'reloadData'를 호출해도 아무런 효과가 없습니다. 나는 여전히 필터를 켜고 끄고 변경 사항을 반영해야한다. – Luke

+0

일부 개체를 unliking 후보기에서 나올 때 나는 또한 충돌을 받고있어, 나는 그들이 거기에 아직도있을 것으로 생각합니다. 엄청 혼란스러워. – Luke

+0

혼란스럽게해서 죄송합니다. 'UINavigationController' 메카니즘을 사용합니까 아니면 모달로 디테일 뷰를 제공합니까? – ilmiacs

관련 문제