-1

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

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

谢谢

4

2 回答 2

2

您是否正确注册playlist依赖键

您需要指定播放列表对象的更改意味着该trackCount更改。

这都是KVO 合规性的一部分。

例子

或多或少完全取自我给你的文档的链接。

将此添加到您的实现文件中:

+ (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 可能更改的通知。

于 2013-01-18T17:59:14.427 回答
0

要么你还没有初始化数组playlist

playlist = [[NSMutableArray alloc] init];

或者你没有调用trackCount方法。

NSUInteger someValue=[self trackCount];
于 2013-01-18T17:57:04.007 回答