2013-08-05 2 views
5

나는 NSArraypropertyKVO으로보고 있습니다. 나는 this post과 같은 KVC을 구현했으며 배열 접근 자도 대부분 KVC 개를 구현했습니다. 이를 돌연변이 화하기 위해 mutableArrayValueForKey을 사용합니다. 그것은이 문제를 제외하고 잘 작동 : removeAllObjects의 KVO가 각 항목에 대해 NSKeyValueChangeRemoval을 트리거합니다.

  1. 내가 removeAllObjects 전화

    , 나는 각각의 단일 제거 항목에 대한 NSKeyValueChangeRemoval 변화 를 얻을. 삭제 된 모든 색인이있는 NSKeyValueChangeRemoval 알림 만 수신하고 싶습니다.

  2. 마찬가지로 addObjectsFromArray:으로 전화하면 각 추가 된 항목마다 NSKeyValueChangeInsertion이됩니다. 추가 된 모든 색인이있는 하나의 NSKeyValueChangeInsertion 알림 만 수신하고 싶습니다. 내가을


사항은 KVC 방법 remove<Key>ItemsAtIndexes:insert<Key>Items:atIndexes:을 구현했습니다. 그들은 이 아니고입니다.

- (void)removeAllObjectsWorkaroundFromArray:(NSMutableArray *)modelArray { 
    NSRange indexRange; 
    indexRange.length = modelArray.count; 
    indexRange.location = 0; 
    NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:indexRange]; 
    [modelArray removeObjectsAtIndexes:indexSet]; 
} 

- (void)addObjectsFromArrayWorkaroundWithArray:(NSMutableArray *)modelArray arrayToAdd:(NSArray *)arrayToAdd { 
    NSRange indexRange; 
    indexRange.length = arrayToAdd.count; 
    indexRange.location = modelArray.count; 
    NSIndexSet *indexSet = [[NSIndexSet alloc] initWithIndexesInRange:indexRange]; 
    [modelArray insertObjects:arrayToAdd atIndexes:indexSet]; 
} 

바로 위의 해결 방법에 대한 필요없이 removeAllObjectsaddObjectsFromArray:를 사용하는 방법이 있나요 : 나는 다음과 같은 해결 방법을 사용

?

+0

마지막 줄에 오타가 있습니까? – Mundi

+0

옙, 고마워. 수정 됨. – fabb

답변

0

배열 자체를 관찰 할 수 없다는 것을 알고 계실 것입니다. 그래서 당신의 해결 방법은 피할 수 없다고 생각합니다.

그 말은 - 나는 당신이 이것을 해결하는 방식을 정말 좋아합니다!

+0

피할 수 없다고 생각하는 이유에 대해 좀 더 자세히 설명해 주시겠습니까? 나는이 문제가 아이템을 하나씩 추가/제거하는'removeAllObjects'와'addObjectsFromArray :'메소드의 구현에 기인한다고 생각한다. 내가 그 질문을했는지 확인하기 위해 어쩌면 뭔가를 간과했다. 해결 방법을 피할 수없는 경우, NSArray'에 대한 해결 방법 메서드 범주 메서드를 만들 것입니다. – fabb

+0

내가 말했듯이, 배열 자체가 아니라 배열의 객체가 관찰됩니다. 그것은 피할 수없는 것을 설명합니다. 카테고리가 좋은 방법 인 것 같습니다. – Mundi