我正在尝试遍历我的iPod库中歌曲的持久ID的NSMutableArray,使用每个ID执行MPMediaQuery,并从Query返回的MPMediaItems的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(最后一个)一)被添加到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循环只会错过数组中的第一个元素。
答案 0 :(得分:0)
代码中唯一错误的是声明:
[pID release];
您尚未分配它,因此您无需销毁它。休息一切都很好。
还需要进行一项更改。在下面的行中,您将pId作为字符串传递。你应该将它作为数字传递。
NSNumber *pID = [NSNumber numberWithLongLong:[[self.songArray objectAtIndex:i] longLongValue]];
[cellQuery addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:pID
forProperty:MPMediaItemPropertyPersistentID]];