我有一个有2个属性的类:
@property (copy) NSString *name; //name of the file
@property (copy) NSString *path; //path of the file
@property NSImage *img; //icon of the file
问题 我希望在路径更改时命名和img自动填充,就像每当路径更改时应该引发事件,以便我可以刷新名称和img。
非常感谢提前。请注意,我对objective-c已经有2个月了,而且我在过去2年里一直处于.net世界。
答案 0 :(得分:3)
您可以使用完善的 KVO(键值观察)技术:
第1步:假设您已经有一个模型类说MyData
具有这些属性,请设置您的控制器类或创建该模型对象的位置作为path
的观察者像这样的东西:
MyData *data = [[MyData alloc] init];
[data addObserver:self forKeyPath:@"path" options:NSKeyValueObservingOptionNew context:NULL];
第2步:实施observeValueForKeyPath:ofObject:change:context:
方法以收听path
属性中的任何更改。像这样:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
MyData *myData = (MyData *)object;
myData.name = @"My Name";
myData.image = // Set your image here
}
第3步:重要的是,每当您的对象被取消分配时,不要忘记将自己移除为此属性的观察者。否则你可能会崩溃!
答案 1 :(得分:2)
(已更新以防止循环播放)
您可以使用setter函数。而不是使用MyClass.name = ...
声明该类中的函数并使用它来更改值:
- (void) setPath:(NSString*)newvalue{
_path = newvalue;
[self updateNameAndPicture];
}
然后,当您更改它时,请使用
[InstanceOfMyClass setPath:@"/new/path/"];