假设我有一个CatModel对象:
@interface CatModel : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, strong) UIImage *catImage;
- (void)addWhisker:(Whisker*)whisker;我有一个CatView:
@interface CatView : UIView
@property (nonatomic, strong) CatModel *dataSource;
@end我想让CatView自动添加一个晶须图像,当它检测到一个晶须被添加到它的dataSource。我不想向CatModel实例添加Whisker,也不想将addWhisker方法添加到CatView中。做这件事最好的方法是什么?
发布于 2013-12-19 20:18:00
听起来您可能使用键值观察,但不幸的是,NSArray或任何其他集合都与KVO不兼容。
相反,您可能希望创建一个委托功能:
@protocol CatModelObserving
@optional
- (void)catModel:(CatModel *)model didAddWhisker:(Whisker *)whisker;
@end
...
@interface CatModel
@property (weak, nonatomic) id <CatModelObserving> observer;
@end然后,您将确保CatView符合该协议并实现该方法:
- (void)catModel:(CatModel *)model didAddWhisker:(Whisker *)whisker {
// handle it properly
}在您的CatModel.m中,在-addWhisker:方法中,您应该通知观察者添加了一个晶须:
if (self.observer && [self.observer respondsToSelector:@selector(catModel:didAddWhisker:)]) {
[self.observer catModel:self didAddWhisker:whisker];
}如果您希望有多个“观察者”,您可以考虑使用GCD和基于块的“通知”,如下所示:
[catModel addDidAddWhiskerBlock:^(Whisker *whisker) {
// handle it properly
}];但我不会在这个答案中讨论这个方法。作为提示,我可以建议使用NSMutableArray存储所有这些块,然后在-addWhisker:方法中迭代这些块并调用每个块。
https://stackoverflow.com/questions/20690426
复制相似问题