Недопустимое значение MPMediaQuery.

Я запускаю MPMediaQuery, чтобы найти песню в библиотеке iPod пользователя, например:

MPMediaQuery *songQuery = [MPMediaQuery songsQuery];

[songQuery addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:track.title forProperty:MPMediaItemPropertyTitle comparisonType:MPMediaPredicateComparisonEqualTo]];

[songQuery addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:track.album forProperty:MPMediaItemPropertyAlbumTitle comparisonType:MPMediaPredicateComparisonEqualTo]];

[songQuery addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:track.artist forProperty:MPMediaItemPropertyArtist comparisonType:MPMediaPredicateComparisonEqualTo]];


*** CRASH HERE ***
if (songQuery.items.count > 0) {

    return [songQuery.items objectAtIndex:0];

}

else {

    return nil;

}

Приложение вылетает и выдает:

'invalid value (nil) for property item_extra.title.'

Я делаю что-то не так? Есть ли лучший способ запросить песню? Всем спасибо!


person John Wickham    schedule 09.08.2014    source источник


Ответы (1)


В этой строке:

[songQuery addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:track.title forProperty:MPMediaItemPropertyTitle comparisonType:MPMediaPredicateComparisonEqualTo]];

Значение для track.title равно нулю. Вам нужно сделать проверку, например:

if (track.title != nil)
{
[songQuery addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:track.title forProperty:MPMediaItemPropertyTitle comparisonType:MPMediaPredicateComparisonEqualTo]];
}

Редактировать: я бы рекомендовал проверить каждую из переменных, которые вы будете добавлять в качестве предиката фильтра, чтобы убедиться, что они также не равны нулю!

person Will    schedule 09.08.2014
comment
О боже... Я думал, что это был очевидный виновник, основываясь на выводе журнала, поэтому я зарегистрировал значения ранее и убедился, что они не равны нулю. Когда я был уверен, я изменил способ установки значений, и они вернулись к нулю во время запроса. Вы были абсолютно правы, спасибо! - person John Wickham; 09.08.2014