0

가져온 결과 컨트롤러와 결합 된 UITableView가 있습니다. 나는 콘트롤러를 전개하여 콘텐트 메소드를 변경하고, frc의 델리게이트를 스스로 설정한다.대리자 메서드 후에 선택기 수행 호출

하지만 함수에서 위임자가 아니기 때문에 내용 위임 메서드가 변경되지 않고 일부 작업 후에 위임을 다시 자체 작업으로 변경하여 다른 메서드가 올바르게 작동하는지 확인해야합니다.

-(void)function 
{ 
    self.frc.delegate = nil; 
    for (id obj in self.frc.fetchedObjects) { 
     if ([obj isKindOfClass:[MultiValue class]]) { 
      MultiValue * multiValue = (MultiValue *)obj; 
      multiValue.isSelected = [NSNumber numberWithBool:YES]; 
     } 
    } 
    self.frc.delegate = self; 
} 

문제는이 대리자 방법 (controllerWillChangeContent)는 함수 방법 다음에 호출 될 것이다, 그래서 자기에 self.frc.delegate을 설정 한 후, 대리인이 방법은 여전히 ​​호출됩니다.

해결 방법? 많은 감사합니다.

+0

더 많은 코드를 붙여 넣을 수 있습니까 ?? –

+0

이 (가) 이미 업데이트되었습니다. for 루프에서 frc를 변경하지만 대리 메서드는 함수 메서드가 반환 된 후에 만 ​​호출됩니다. 더 중요한 것은 for 루프를 다른 함수에 넣고 여기에서 호출하면이 함수가 반환 된 후에도 대리자 메서드가 계속 호출된다는 것입니다. 그래서 그냥 대리자를 자체로 설정하는 방법을 알고 싶지만 대리자 메서드는 호출하지 않아야합니다. 감사합니다 – Alvin

답변

0

우선 :

위임은 개체의 동작을 사용자 지정하는 방법입니다. 그것은 인스턴스별로 서브 클래 싱과 유사합니다. 객체가 살아있는 동안 인스턴스의 계층 구조를 변경하겠습니까? (그렇습니다. 아주 드문 경우입니다.)

개체의 대리자는 개체의 "상태"가 아니므로 변경해야합니다. 그것은 물체의 "종류"와 같은 것입니다. 전체 접근법을 다시 확인해야합니다. 모든

둘째 :

이유는 모든 변경 사항을 수집하고 대리자를 재설정 할 때 대리자 메시지가, 이후에 전송되는 것입니다. 이 동작은 대부분의 상황에서 더 좋습니다. 워드 프로세서에서 : 다시로드 (보류중인 모든 변경 가 처리 된 경우 대리자로 전송됩니다) :

오히려 ( 일반적인 사용에 도시 된 바와 같이) 개별적으로 변화에 대응보다, 당신은 단지 controllerDidChangeContent을 구현할 수 테이블 뷰.

당신은 다시 확인해야합니다, 당신이 다른 상황에서 연락 할 때 특정 상황의 변화에 ​​대한 정보를 싶지 않은 이유는, Q로

https://developer.apple.com/library/ios/documentation/CoreData/Reference/NSFetchedResultsControllerDelegate_Protocol/index.html

. 이것은 구조적인 냄새처럼 보입니다. 정말로 그러한 상황에 처한 경우 다시 확인해야합니다. 이러한 상황에 처한 경우 변경을 무시하도록 신호를 보내는 대리자 내부에 플래그를 설정할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 변경 사항을 무시하도록 플래그를 설정하더라도 성능은 상당히 나쁩니다 (가져온 결과 컨트롤러의 모든 개체를 변경하기 때문에 대리자를 nil로 설정하면 성능이 상당히 좋아집니다). – Alvin

+0

그걸 보여주는 최소한의 프로젝트를 만들 수 있습니까? –

관련 문제