为什么我的for循环错过了它操作的NSMutableArray中的第一个元素



我试图循环通过一个NSMutableArray的持久性ID的歌曲在我的iPod库,执行一个MPMediaQuery与每个ID,并初始化从查询返回的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);

自我的地方。songArray是包含Persistent id的NSMutableArray。代码可以工作,只是它错过了self.songArray中的第一个元素。这是我的一些控制台输出,显示了self。在for循环开始前包含3个条目的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>

EDIT:删除[pID release];,现在for循环只错过数组中第一个元素

代码中唯一错误的地方是下面的语句:

[pID release];

您没有分配它,所以您不需要销毁它。休息一下,一切都很好。

还需要进行另一个更改。在下一行中,您将pId作为字符串传递。你应该把它作为number传递。

NSNumber *pID = [NSNumber numberWithLongLong:[[self.songArray objectAtIndex:i] longLongValue]];
[cellQuery addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:pID
                      forProperty:MPMediaItemPropertyPersistentID]];

最新更新