objective-c – 在NSMutableArray中观察计数
栏目: Objective-C · 发布时间: 5年前
内容简介:我希望在计数时得到通知,即. NSArray中的项目数量发生变化..当然我不需要这个,如果我控制添加和删除对象到数组中.但我不是,它在业务流程模型方面无法预测,并且取决于外部因素.有一些简单优雅的解决方案吗?
我希望在计数时得到通知,即. NSArray中的项目数量发生变化..
当然我不需要这个,如果我控制添加和删除对象到数组中.但我不是,它在业务流程模型方面无法预测,并且取决于外部因素.
有一些简单优雅的解决方案吗?
编辑:我当然正在纠正这个NSMutableArray ..
.但是如何去做呢?毕竟,NSMutableArray不符合其变异方法或内容更改的键值编码.答案是代理-as子类NS [Mutable]数组太麻烦了.
NSProxy是一个很棒的小类,你可以使用它来拦截发送到你的数组的消息,就好像你是一个NSMutableArray,然后将它们转发到一些内部实例.不幸的是,它也不符合KVC,因为KVC的胆量存在于NSObject中.那么我们必须使用它.示例界面可能如下所示:
@interface CFIKVCMutableArrayProxy : NSObject { NSMutableArray *_innerArray; } - (NSUInteger)count; - (void)insertObject:(id)anObject atIndex:(NSUInteger)index; - (void)removeObjectAtIndex:(NSUInteger)index; - (void)addObject:(id)anObject; - (void)removeLastObject; - (void)insertObjects:(NSArray *)objects atIndexes:(NSIndexSet *)indexes; - (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject; //… @end
正如您所看到的,我们正在模拟NSMutableArray的接口,这是必要的,因为我们的代理应该实现所有内容,就像它是NSMutableArray一样.这也使得实现尽可能简单,因为我们可以将选择器转发到我们的内部NSMutableArray指针.为了简洁起见,我将只实现两种方法来向您展示大致轮廓的样子:
@implementation CFIKVCMutableArrayProxy //… - (NSUInteger)count { return _innerArray.count; } - (void)addObject:(id)anObject { [self willChangeValueForKey:@"count"]; [_innerArray addObject:anObject]; [self didChangeValueForKey:@"count"]; } - (void)removeLastObject { [self willChangeValueForKey:@"count"]; [_innerArray removeLastObject]; [self didChangeValueForKey:@"count"]; } @end
如果您没有机会像这样包装数组,那么请尝试重新考虑您的代码.如果外部依赖项迫使您进入此类角落,请尝试将其删除.解决自己的 工具 总是一件坏事.
翻译自:https://stackoverflow.com/questions/10059279/observing-count-in-nsmutablearray
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。