2013-08-05 5 views
5

私はNSArraypropertyKVOと見ています。私はthis postのようなKVCを実装しましたが、私もKVCのアレイアクセサのほとんどを実装しました。それを突然変異させるために、私はmutableArrayValueForKeyを使います。私は​​を呼び出すと、私はそれぞれの単一削除されたアイテムためNSKeyValueChangeRemoval変更を取得removeAllObjectsのKVOは、それぞれの項目のNSKeyValueChangeRemovalをトリガーします。

  1. :それは2つの問題を除いて、正常に動作します。すべての削除されたインデックスを含むNSKeyValueChangeRemoval通知を1つだけ受信したいとします。

  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]; 
} 

直接上記の回避策を必要とせずに​​とaddObjectsFromArray:を使用する方法があります:私は次の回避策を使用

+0

最後のコード行に誤字がありますか? – Mundi

+0

Yepp、ありがとう。修正されました。 – fabb

答えて

0

私は確信していると思いますが、配列そのものを見ることはできません。あなたの回避策は避けられないと思います。

言われている - 私はあなたがこれを解決する方法が本当に好きです!

+0

なぜそれが避けられないと思うのかについてもう少し詳しく説明できますか?私は問題は、アイテムを1つずつ追加/削除するメソッド 'removeAllObjects'と' addObjectsFromArray: 'の実装に起因すると思います。私が質問したことを確かめるために、多分私は何かを見過ごした。回避策が避けられないときは、 'NSArray'の回避策メソッドのカテゴリメソッドを作成します。 – fabb

+0

私が言ったように、アレイ自体のオブジェクトではなく、アレイのオブジェクトが観察されます。それはやむを得ない理由だ。カテゴリは良い方法のようです。 – Mundi

関連する問題