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

Ios 为什么我的for循环错过了它操作的NSMutableArray中的第一个元素?,ios,for-loop,nsmutablearray,Ios,For Loop,Nsmutablearray,我正在尝试循环使用iPod库中歌曲持久ID的NSMutableArray,使用每个ID执行MPMediaQuery,并从查询返回的MPMediaItems的NSMutableArray初始化MPMediaItemCollection。这是我的密码: NSMutableArray *tempArray = [[NSMutableArray alloc] init]; NSLog(@"songArray viewDidLoad: %@", self.songArray); for (int i=0;

我正在尝试循环使用iPod库中歌曲持久ID的NSMutableArray,使用每个ID执行MPMediaQuery,并从查询返回的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);
NSMutableArray*tempArray=[[NSMutableArray alloc]init];
NSLog(@“songArray viewDidLoad:%@”,self.songArray);

对于(int i=0;i代码中唯一错误的是以下语句:

[pID release];
您没有分配它,所以不需要销毁它。其余的一切看起来都很好

还需要一个更改。在下面的行中,您将pId作为字符串传递。您应该将其作为数字传递

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

检查您的查询是否确实找到了任何项(在
[tempArray addObject:item];
行中设置一个日志或断点)。我确实添加了一个NSLog,并且除了最后一个元素外,[cellQuery items]似乎为空。有趣的是,删除了[pID release];使for循环获取除第一个元素以外的所有元素。知道为什么它会错过第一个元素吗?我是否应该开始一个新问题,因为它似乎是一个新的、不相关的问题?谢谢Apurv,我一定是在您发布时发现了数字问题。我设法使它与此一起工作:unsigned long-lullvalue=strtoull([pID UTF8String],NULL,0);NSNumber*UniqueID=[NSNumber numberWithUnsignedLongLong:ullvalue];我使用UniqueID作为谓词值。我会将您的答案标记为正确。@user2136500很棒。享受编码吧。。!!
NSNumber *pID = [NSNumber numberWithLongLong:[[self.songArray objectAtIndex:i] longLongValue]];
[cellQuery addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:pID
                      forProperty:MPMediaItemPropertyPersistentID]];