NSUrl未存储为NSUserDefault中的absolutestring

时间:2011-09-14 05:07:27

标签: iphone objective-c nsuserdefaults nsurl datastore

我指的是Previous Post用于在NSUserDefault中存储iPod库的NSURL。但应用程序关闭后,它不会存储在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 个答案:

答案 0 :(得分:22)

如果要存储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 :(得分:1)

我能想到的唯一可以解释的是,URL至少部分是随机生成的,因此在应用程序删除对它的引用后无法加载。你是什​​么意思,“关闭”?转到后台?还是真的终止了?

也可能是您应该将其另存为string:yourURLString forKey:@"URL"而不是对象。它可能会混淆应用程序。尝试NSLog输出网址字符串,看看你得到了什么。让我知道它是什么。这将澄清事情。

答案 2 :(得分:0)

你的字符串应该声明属性...然后尝试将其存储在NSUserDefaults