Я получаю идентификатор элемента мультимедиа из MPMediaPickerController. Согласно документации, это значение представляет собой объект NSNumber, содержащий uint64_t (беззнаковый длинный длинный). Я хотел бы преобразовать его в NSString для сохранения в моей модели данных. Однако, когда я конвертирую его в строку, его значение изменяется, а когда я конвертирую его обратно в число, он снова меняется! Очевидно, я не понимаю что-то об этих типах данных. Вы можете помочь?нужна помощь в преобразовании MPMediaItemPropertyPersistentID в строку и обратно
MPMediaItem *mediaPicked;
// set mediaPicked to an MPMedia item using MPMediaPickerController...
NSLog(@"id as number: %qu", [mediaPicked valueForProperty:MPMediaItemPropertyPersistentID]); // outputs 566042331449280
NSLog(@"id as string: %@", [[mediaPicked valueForProperty:MPMediaItemPropertyPersistentID] stringValue]); // outputs 16204893883745507648
NSLog(@"id as number: %qu", [[[mediaPicked valueForProperty:MPMediaItemPropertyPersistentID] stringValue] longLongValue]); // outputs 9223372036854775807
Если я попытаюсь воспроизвести элемент мультимедиа перед этим преобразованием, он всегда работает. Но если я попытаюсь воспроизвести элемент мультимедиа после этого преобразования, будет работать только половина элементов мультимедиа, которые я пробовал. Поэтому некоторые значения ID выживают при конверсии, а некоторые нет.
У меня было ощущение, что у меня плохо получается, но «NSNumber» вокруг долгого отсутствия без знака "отбрасывает меня. Если я изменил NSLog для использования% @ вместо% qu, то я вижу, что преобразование из исходного NSNumber в NSString с использованием stringValue в порядке. Но тогда, как вы сказали, нет сопоставимого способа преобразования NSString в NSNumber. Однако, когда моя проблема была определена лучше, я сделал еще несколько поисков и нашел альтернативу здесь: http://stackoverflow.com/questions/1181637/storing-and-retrieving-unsigned-long-long-value-to-from-nsstring , Спасибо за вашу помощь! – arlomedia