iosobjective-cnsstringmpmediaitemcollection

call NSString whit multiple parameters


I am a beginner and maybe it is a trivial question. I have this method:

-(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];
}

I would like to call it here with a 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];
}

I would like to get the number of tracks in each playlist. It doesn't work. How do I fix? Thanks in advance!


Solution

    1. Why are you using performSelector:withObject:? Just call the method directly:

      cell.detailTextLabel.text = [self getInfoFormediaItem:collection];
      
    2. Why are you passing nil to the withObject: parameter? That's why your code goes to the else. list is nil so [list count] will always be 0. You need to pass an actual instance of a MPMediaItemCollection.

    3. Why are you needlessly using stringWithFormat: for the 1 and 0 count checks? Just do:

      -(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;
      }
      
    4. Based on your updated question, your cellForRowAtIndexPath code isn't correct for the getting the media collection. The collectionsmethod returns an array of MPMediaCollection objects, not MPMediaItem objects. You need:

      MPMediaQuery *playlistsQuery = [MPMediaQuery playlistsQuery];
      NSArray *playl = [playlistsQuery collections];
      MPMediaItemCollection *collection = playl[indexPath.row];
      

      Now you can use collection when you call getInfoFormediaItem:.