NSMutableArray计数不用数组更新

时间:2013-01-18 17:54:25

标签: objective-c binding xcode4

我有一个我初始化的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,但添加曲目时标签不会更新(日志也不会更新)。我究竟做错了什么??

它是否更有意义和/或更容易计算表中的行数,因为它们应该始终是相同的数字?

由于

2 个答案:

答案 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];