0

iPod ライブラリ内の曲の永続 ID の NSMutableArray をループし、各 ID で MPMediaQuery を実行し、クエリから返された MPMediaItem の NSMutableArray から MPMediaItemCollection を初期化しようとしています。これが私のコードです:

NSMutableArray *tempArray = [[NSMutableArray alloc] init];
NSLog(@"songArray viewDidLoad: %@", self.songArray);
for (int i=0; i<[self.songArray count]; i++) {
    NSString *pID = [NSString stringWithFormat:@"%@", [self.songArray objectAtIndex:i]];
    MPMediaQuery *cellQuery = [[MPMediaQuery alloc] init];
    [cellQuery addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:pID
                      forProperty:MPMediaItemPropertyPersistentID]];
    [pID release];
    for (MPMediaItem *item in [cellQuery items]) {
        [tempArray addObject:item];
    }
    [cellQuery release];
    NSLog(@"tempArray: %@", tempArray);
}
self.detailCollection = [[MPMediaItemCollection alloc] initWithItems:tempArray];
NSLog(@"self.detailCollection: %@", self.detailCollection);

ここで、self.songArray は永続 ID を含む NSMutableArray です。コードは機能しますが、self.songArray の最初の要素が欠落しています。これは私のコンソール出力の一部で、for ループが始まる前に 3 つの項目を含む self.songArray と、1 つの ID (最後の ID) のみが NSMutableArray に追加されていることを示しています。

2013-06-14 14:55:17.472 green[5579:907] songArray viewDidLoad: (
    14834145442532377094,
    13706522831184680273,
    1223941966377655149
)
2013-06-14 14:55:17.498 green[5579:907] tempArray: (
)
2013-06-14 14:55:17.501 green[5579:907] tempArray: (
)
2013-06-14 14:55:17.505 green[5579:907] tempArray: (
    "<MPConcreteMediaItem: 0x1146e5a0> 1223941966377655149"
)
2013-06-14 14:55:17.506 green[5579:907] self.detailCollection: <MPMediaItemCollection: 0x11feb140>

編集: [pID release]; を削除しました。現在、for ループは配列の最初の要素のみを見逃しています。

4

1 に答える 1