Tôi đang xem NSArray
property
với KVO
. Tôi đã triển khai KVC
như trong this post và tôi cũng đã triển khai hầu hết các trình truy cập mảng KVC
. Để thay đổi nó, tôi sử dụng mutableArrayValueForKey
. Nó hoạt động tốt, ngoại trừ 2 vấn đề:KVO trên removeAllObjects Kích hoạt NSKeyValueChangeRemoval cho từng Mục riêng biệt
Khi tôi gọi
removeAllObjects
, tôi nhận được mộtNSKeyValueChangeRemoval
thay đổi cho từng hạng mục gỡ bỏ đơn. Tôi chỉ muốn nhận được một thông báoNSKeyValueChangeRemoval
với tất cả các chỉ mục đã xóa trong đó.Tương tự khi tôi gọi
addObjectsFromArray:
, tôi nhận đượcNSKeyValueChangeInsertion
cho từng mục được thêm vào. Tôi chỉ muốn nhận được một thông báoNSKeyValueChangeInsertion
với tất cả các chỉ mục được thêm vào trong đó.
Chú ý rằng tôi làm đã triển khai phương pháp KVC remove<Key>ItemsAtIndexes:
và insert<Key>Items:atIndexes:
. Chúng là không phải là được gọi là mặc dù.
tôi sử dụng cách giải quyết như sau:
- (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];
}
Có cách nào để trực tiếp sử dụng removeAllObjects
và addObjectsFromArray:
mà không cần các giải pháp trên?
Lỗi trong dòng cuối cùng của mã? – Mundi
Yepp, cảm ơn. Đã sửa. – fabb