NSUrl не хранится как абсолютная строка в NSUserDefault - PullRequest
6 голосов
/ 14 сентября 2011

Я имею в виду Предыдущий пост для хранения NSURL библиотеки iPod в NSUserDefault.Но он не сохраняется в NSUserDefault после закрытия приложения.

Я использую другие строки NSStrings для хранения в NSUserDefaults, что прекрасно, но когда я сохраняю NSUrl как абсолютную строку ... он не сохраняет значения.

В чем может быть причина ??

РЕДАКТИРОВАТЬ

Следующий код, который я использую для сохранения значения NSUserDefault:

currentItem = [collection.items objectAtIndex:songCount];
songURL = [currentItem valueForProperty:MPMediaItemPropertyAssetURL];
[[NSUserDefaults standardUserDefaults] setObject:[currentItem valueForProperty:MPMediaItemPropertyTitle] forKey:@"songTitle"];
[[NSUserDefaults standardUserDefaults] setObject:[songURL absoluteString] forKey:@"songURL"];
avPlayer = [[AVPlayer alloc] initWithURL:songURL];
NSLog(@"songTitle: %@  songURL : %@",[[NSUserDefaults standardUserDefaults]objectForKey:@"songTitle"], songURL);

Следующая ошибка возникает при попытке сохранить NSURL:

2011-09-13 18:47:23.258 Tabata Timer[933:707] songURL : ipod-library://item/item.mp3?id=-3715406019015217536
2011-09-13 18:47:23.258 Tabata Timer[933:707] *** -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value 'ipod-library://item/item.mp3?id=-3715406019015217536' of class 'NSURL'.
2011-09-13 18:47:23.260 Tabata Timer[933:707] songTitle : Ghajini
2011-09-13 18:47:24.860 Tabata Timer[933:707] *** -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value 'ipod-library://item/item.mp3?id=-3715406019015217536' of class 'NSURL'.
2011-09-13 18:47:24.963 Tabata Timer[933:707] songURL : ipod-library://item/item.mp3?id=-3715406019015217536
warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.3.5 (8L1)/Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib (file not found).

Ответы [ 3 ]

22 голосов
/ 14 сентября 2011

Если вы хотите сохранить NSURL, почему вы конвертируете его в строку и сохраняете как строку? Это увеличит ваши трудозатраты.

Вы можете попробовать это:

NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];     
[defaults setURL:[NSURL URLWithString:@"http://www.google.com"] forKey:@"urlValue"];
[defaults synchronize];

NSURL *url=[defaults URLForKey:@"urlValue"];
NSLog(@"%@",url);
1 голос
/ 14 сентября 2011

Единственное, что я могу придумать, это объяснить тем, что URL по крайней мере частично генерируется случайным образом и, следовательно, не загружается после того, как приложение удаляет ссылку на него. Что значит "закрыто"? Справочная информация? Или действительно прекращено?

Возможно также, что вы должны сохранить его как string:yourURLString forKey:@"URL" вместо объекта. Это может запутать приложение. Попробуйте NSLog вывести строку URL и посмотреть, что вы получите. Дайте мне знать, что это такое. Это прояснит ситуацию.

0 голосов
/ 14 сентября 2011

ваша строка должна иметь объявленное свойство ... затем попытайтесь сохранить его в NSUserDefaults

...