我有一个我初始化的NSMutableArray:
- (id)init
{
self = [super init];
if (self) {
playlist = [[NSMutableArray alloc] init];
}
return self;
}
并用它填充表格。我有一个方法来计算数组中的项目数:
- (NSUInteger)trackCount
{
tracks = [playlist count];
NSLog(@"Number of tracks = %lx", tracks);
return tracks;
}
我有一个标签绑定到我的appDelegate,模型键路径为trackCount
,但添加曲目时标签不会更新(日志也不会更新)。我究竟做错了什么??
它是否更有意义和/或更容易计算表中的行数,因为它们应该始终是相同的数字?
由于
答案 0 :(得分:2)
您是否已将playlist
正确注册为dependent key
您需要指定对播放列表对象的更改意味着trackCount
将更改。
这是KVO compliance的全部内容。
示例强>
从我给你的文档的链接中或多或少地做了。
将此添加到您的实施文件中:
+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key {
NSSet *keyPaths = [super keyPathsForValuesAffectingValueForKey:key];
if ([key isEqualToString:@"trackCount"]) {
NSArray *affectingKeys = @[@"playlist"];
keyPaths = [keyPaths setByAddingObjectsFromArray:affectingKeys];
}
return keyPaths;
}
keyPathsForValuesAffectingValueForKey:
是NSKeyValueObservingProtocol
。
这段代码的作用是说播放列表的任何更改都会触发trackCount的更改。因此,当播放列表发生变化时,任何trackCount观察者都会收到有关trackcount可能更改的通知。
答案 1 :(得分:0)
您尚未初始化数组playlist
。
playlist = [[NSMutableArray alloc] init];
或者您没有调用trackCount
方法。
NSUInteger someValue=[self trackCount];