我是初学者,也许这是一个微不足道的问题。 我有这个方法:
-(NSString *)getInfoFormediaItem:(MPMediaItemCollection *)list {
NSString *trackCount;
if ([list count] > 0) {
trackCount = [NSString stringWithFormat:NSLocalizedString(@"%lu Songs", @""), (unsigned long)[list count]];
} else if([list count] == 1) {
trackCount = [NSString stringWithFormat:NSLocalizedString(@"1 Song", @"")];
} else {
trackCount = [NSString stringWithFormat:NSLocalizedString(@"0 Song", @"") ];
}
return [NSString stringWithFormat:@"%@", trackCount];
}
我想在这里用 MPMediaItemCollection 来称呼它:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if( cell == nil )
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"];
}
MPMediaQuery *playlistsQuery = [MPMediaQuery playlistsQuery];
NSArray *playl = [playlistsQuery collections];
MPMediaItem *rowItem = [playl objectAtIndex:indexPath.row];
MPMediaItemCollection * collection = [[MPMediaItemCollection alloc] initWithItems:[NSArray arrayWithObject:rowItem]];
cell.detailTextLabel.text = [self getInfoFormediaItem:collection];
}
我想获得每个播放列表中的曲目数量。 它不起作用。我该如何解决?提前谢谢!
答案 0 :(得分:5)
您为什么使用performSelector:withObject:
?只需直接调用该方法:
cell.detailTextLabel.text = [self getInfoFormediaItem:collection];
为什么要将nil
传递给withObject:
参数?这就是您的代码转到else
的原因。 list
为nil
,因此[list count]
始终为0
。您需要传递MPMediaItemCollection
的实际实例。
为什么你不必要使用stringWithFormat:
进行1和0计数检查?只是做:
-(NSString *)getInfoFormediaItem:(MPMediaItemCollection *)list {
NSString *trackCount;
if ([list count] > 1) {
trackCount = [NSString stringWithFormat:NSLocalizedString(@"%lu Songs", @""), (unsigned long)[list count]];
} else if([list count] == 1) {
trackCount = NSLocalizedString(@"1 Song", @"");
} else {
trackCount = NSLocalizedString(@"0 Song", @"");
}
return trackCount;
}
根据您更新的问题,您的cellForRowAtIndexPath
代码对于获取媒体收藏并不正确。 collections
方法返回MPMediaCollection
个对象的数组,而不是MPMediaItem
个对象。你需要:
MPMediaQuery *playlistsQuery = [MPMediaQuery playlistsQuery];
NSArray *playl = [playlistsQuery collections];
MPMediaItemCollection *collection = playl[indexPath.row];
现在,您可以在致电collection
时使用getInfoFormediaItem:
。
答案 1 :(得分:0)
您根本不需要致电此声明:
cell.detailTextLabel.text = [self performSelector:@selector(getInfoFormediaItem:) withObject:nil];
在你的" getInfoFormediaItem"方法中。你可以在你的" cellforrowataIndexPath"定义单元格时的方法,只需按以下方式调用:
cell.detailTextLabel.text = [self getInfoFormediaItem:This_Is_A_List_You_Wanna_Pass_To_The_Method];
你应该好好去。
答案 2 :(得分:0)
除了其他海报所指出的问题外,你的if语句将无法按你的意愿运作:
if ([list count] > 0) {
trackCount = [NSString stringWithFormat:NSLocalizedString(@"%lu Songs",
@""), (unsigned long)[list count]];
} else if([list count] == 1) {
trackCount = [NSString stringWithFormat:NSLocalizedString(@"1 Song", @"")];
} else {
trackCount = [NSString stringWithFormat:NSLocalizedString(@"0 Song", @"") ];
}
" if ...> 0"在检查值1之前,子句将首先匹配,因为1是>因此," if ... == 1"永远不会评价为真。您需要重新排序if语句:
if ([list count] == 1) {
trackCount = NSLocalizedString(@"1 Song", @"");
else if ([list count] > 0) {
trackCount = [NSString stringWithFormat:NSLocalizedString(@"%lu Songs",
@""), (unsigned long)[list count]];
}
else
{
trackCount = NSLocalizedString(@"0 Songs", @"");
}