2011-10-12 23 views
2

是否有可能在Objective-C中做这样的事情,比如说我的数组数是X,那么当它发生时我希望它触发函数Y?那么,NSArray计数的监听者呢?关于NSMutableArray的大小的监听器和观察者

+2

这是非常类似于您的问题:http://stackoverflow.com/questions/302365/observing-an-nsmutablearray-for-insertion-removal。 – Johnnywho

回答

1

我相信你可以创建一个观察者来监听数组的变化。当触发它时,您可以检查数组的大小,并在条件满足时调用方法Y.

-2

您可以编写一个协议(例如称为MutableArrayDelegate),然后扩展NSMutableArray(确保正确调用[super ...]),在某些事件发生时调用委托方法。

@protocol MutableArrayDelegate 
- (void)mutableArrayDidAddObject:(NSMutableArray *)mutableArray; 
@end 

@interface ObservableMutableArray : NSMutableArray 
@property (nonatomic, assign) id<MutableArrayDelegate> delegate; 
@end 

@implementation ObservableMutableArray 
@synthesize delegate; 

- (void)addObject:(id)anObject 
{ 
    [super addObject:anObject]; 
    [delegate mutableArrayDidAddObject:self]; 
} 
@end 

然后,您可以通过分配委托给子类和实施协议侦听事件:

例如,每次添加一个对象时添加监听。

+0

如果你继承NSArray,你必须重写原始实例方法count和objectAtIndex:对于NSMutableArray,你需要重写更多的方法:http://developer.apple.com/library/ mac /#documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html#// apple_ref/occ/cl/NSMutableArray – hypercrypt

+0

我的不好。听起来就像你会打电话给'[super ...]'很多...真的值得downvote?仍然提供了期望的结果。 – sho

+0

不,调用'super'是不够的,你需要自己实现它。 “NSArray”和“NSMutableArray”是类集群,它们本身不执行任何操作。当你创建一个数组时,你会得到一个私有子类,通常这对于用法并不重要,只是一个实现细节,但这意味着当子类化时需要自己实现原始实例方法和存储器时,不能依赖'super'。 – hypercrypt