簡體   English   中英

NSNumber for MPMediaItemPropertyPersistentID到NSString並再次返回

[英]NSNumber for MPMediaItemPropertyPersistentID to NSString and back again

我正在使用以下代碼循環播放iPhone音樂庫中的所有歌曲:

NSArray * songs = [[NSArray alloc] initWithArray:[[MPMediaQuery songsQuery] collections]];

for (MPMediaItemCollection * item in songs){

    NSString * persistentID = [[[item representativeItem] valueForProperty:MPMediaItemPropertyPersistentID] stringValue];
    // Do something with it.
}

[songs release];

很基本的東西。

我將PersistentID作為NSString獲取,因為我需要將其寫入XML文件(通過網絡傳輸到另一個設備)。 因此我不能把它NSNumber

然后另一個設備將通過再次發送PersistentID來要求iPhone播放曲目。

此時,iPhone有一個應該播放的軌道的PersistentID的NSString

再次循環播放每首歌曲並比較PersistentID直到我找到我想要的曲目將會很簡潔,因此我嘗試使用MPMediaPropertyPredicate讓iPhone搜索我。

我正在使用以下代碼進行搜索:

MPMediaPropertyPredicate * predicate = [MPMediaPropertyPredicate predicateWithValue:persistentID forProperty:MPMediaItemPropertyPersistentID];

MPMediaQuery * songsQuery = [[MPMediaQuery alloc] init];
[songsQuery addFilterPredicate:predicate];

if ([[songsQuery items] count]){

    MPMediaItem * item = [[songsQuery items] objectAtIndex:0];
    // Play item.
}

[songsQuery release];

其中persistentID是前面的NSString

奇怪的是,這適用於某些歌曲,而不適用於其他歌曲。 即,有時items數組不是空的,即使我傳遞的是NSString ,而不是NSNumber

我想知道是否有辦法將我的NSString轉換回它來自的NSNumber ,以及我如何做到這一點。

更新 :我已經嘗試過NSNumberFormatter,我也試過類似的東西:

[NSNumber numberWithFloat:[persID floatValue]];

我已經嘗試了所有標准的方法,沒有占上風。

這工作得很好,到目前為止沒有問題:

unsigned long long ullvalue = strtoull([persistentID UTF8String], NULL, 0);
NSNumber * numberID = [[NSNumber alloc] initWithUnsignedLongLong:ullvalue];

MPMediaPropertyPredicate * predicate = [MPMediaPropertyPredicate predicateWithValue:numberID forProperty:MPMediaItemPropertyPersistentID];
[numberID release];

// And so on.

希望這能幫助遇到此問題的其他任何人。

我遇到了一些非常相似的東西並制定了以下內容:

NSNumber *musicIdentifier = [[[NSNumberFormatter alloc] init] numberFromString: persistentID];
MPMediaQuery *query = [[MPMediaQuery alloc] initWithFilterPredicates:[NSSet setWithObject:[MPMediaPropertyPredicate predicateWithValue:musicIdentifier forProperty:MPMediaItemPropertyPersistentID]]];

MPMediaItem *item = query.items.firstObject;

如果我理解正確,你試圖將NSString轉換為NSNumber 為此,您可以使用NSNumberFormatter 看一下numberFromString:方法。

NSNumberFormatter類參考

我只需要做同樣的事情。 MPMediaItemPropertyPersistentID的查詢謂詞必須作為NSNumber傳遞。 我從另一個StackOverflow帖子中找到了將NSString轉換為NSNumber的答案:

NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber * persistentIDasNumber = [f numberFromString:persistantID];
[f release];

MPMediaPropertyPredicate * predicate = [MPMediaPropertyPredicate   predicateWithValue:persistentIDasNumber  forProperty:MPMediaItemPropertyPersistentID];

這對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM