-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 に答える