NSUrl не хранится как абсолютная строка в NSUserDefault.

Я имею в виду предыдущий пост для хранения 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).

person DShah    schedule 14.09.2011    source источник
comment
Можем ли мы увидеть несколько строк кода, где вы храните URL-адрес? Кроме того, когда вы говорите, что он не сохраняет значение, я предполагаю, что конкретная сохраненная строка просто равна нулю? Есть ли предупреждения в вашем коде?   -  person Madhu    schedule 14.09.2011
comment
я добавил код...   -  person DShah    schedule 14.09.2011


Ответы (3)


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

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

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

NSURL *url=[defaults URLForKey:@"urlValue"];
NSLog(@"%@",url);
person Gypsa    schedule 14.09.2011
comment
Зачем использовать [синхронизация по умолчанию] ?? - person DShah; 14.09.2011
comment
На самом деле эти методы автоматически вызываются через определенные промежутки времени и автоматически обновляют данные, но в то же время, если они не обновляются, и если вы их используете, вы получите старые результаты, а не измененные, поэтому он вызывается вручную, чтобы вы могли немедленно сохранить свои данные. - person Gypsa; 14.09.2011
comment
вместо [NSURL URLWithString:..] я использую [url absoluteURL], где url — это мой NSURL... - person DShah; 14.09.2011
comment
какая польза от этого [url absoluteURL]. Если URL имеет тип NSURL, вам просто нужно сделать [setURL по умолчанию: URL forKey: @urlValue]; - person Gypsa; 14.09.2011

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

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

person Dylan Gattey    schedule 14.09.2011
comment
Я добавил код и ошибку. Также каждый раз, когда мое приложение начинается с самого начала. Я не разрешаю своему приложению работать в фоновом режиме, оно всегда будет запускаться как новое. - person DShah; 14.09.2011

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

person Maulik    schedule 14.09.2011
comment
попробуйте создать экземпляр NSURL, создать свойство и синтезировать его, а затем попытаться сохранить... - person Maulik; 14.09.2011