使用多个参数调用 NSString
call NSString whit multiple parameters
我是初学者,也许这是一个微不足道的问题。
我有这个方法:
-(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];
}
我想获取每个播放列表中的曲目数。
它不起作用。我该如何解决?提前致谢!
为什么要使用 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
代码对于获取媒体 collection 是不正确的。 collections
方法 returns 一个 MPMediaCollection
objects 的数组,而不是 MPMediaItem
objects。您需要:
MPMediaQuery *playlistsQuery = [MPMediaQuery playlistsQuery];
NSArray *playl = [playlistsQuery collections];
MPMediaItemCollection *collection = playl[indexPath.row];
现在调用getInfoFormediaItem:
时可以使用collection
。
您根本不需要调用此语句:
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];
你应该可以开始了。
除了其他发帖者指出的问题之外,您的 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 > 0。因此 "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", @"");
}
我是初学者,也许这是一个微不足道的问题。 我有这个方法:
-(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];
}
我想获取每个播放列表中的曲目数。 它不起作用。我该如何解决?提前致谢!
为什么要使用
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
代码对于获取媒体 collection 是不正确的。collections
方法 returns 一个MPMediaCollection
objects 的数组,而不是MPMediaItem
objects。您需要:MPMediaQuery *playlistsQuery = [MPMediaQuery playlistsQuery]; NSArray *playl = [playlistsQuery collections]; MPMediaItemCollection *collection = playl[indexPath.row];
现在调用
getInfoFormediaItem:
时可以使用collection
。
您根本不需要调用此语句:
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];
你应该可以开始了。
除了其他发帖者指出的问题之外,您的 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 > 0。因此 "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", @"");
}