【问题标题】:Unrecognized Selector Error when writing dictionary values to file in iOS在 iOS 中将字典值写入文件时出现无法识别的选择器错误
【发布时间】:2011-11-18 04:54:54
【问题描述】:

我正在读取 ALAsset 对象的数组(在头文件中标记为 NSMutableArray *assets;)。我正在尝试关注this example,以便将 ALAssets 字典的内容打印到文件中以便稍后检索。请注意,我可以正确地将字典键写入文件(已注释掉),但不能正确写入值。

这是我在 viewDidLoad() 方法末尾运行的代码:

// Create path to Documents
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

if ([paths count] > 0) {
    NSString *dictPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"dict.out"];
    NSDictionary *aDict = [[assets objectAtIndex:0] valueForProperty:ALAssetPropertyURLs];

    for (id key in aDict) {
        NSLog(@"key: %@, value: %@", key, [aDict valueForKey:key]);  
        //[key writeToFile:dictPath atomically:YES];        <- THIS LINE WORKS
        [[aDict valueForKey:key] writeToFile:dictPath atomically:YES];            
    }
}
else
    NSLog(@"nope");    // The program doesn't get here.

日志如下所示:

2011-11-17 23:44:41.340 PhotoApp[542:12803] 密钥:public.jpeg, 值:asset-library://asset/asset.JPG?id=1000000001&ext=JPG

2011-11-17 23:44:41.361 PhotoApp[542:12803] -[NSURL writeToFile:atomically:]: 无法识别的选择器发送到实例 0x6455650

2011-11-17 23:44:41.370 PhotoApp[542:12803] * 由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'-[NSURL writeToFile:atomically:]: 无法识别的选择器发送到实例 0x6455650'


编辑:不确定是否重要,但该项目针对 iPad,并且正在模拟器上运行。

【问题讨论】:

    标签: iphone ios ipad dictionary alassetslibrary


    【解决方案1】:

    问题是 [[aDict valueForKey:key] writeToFile:dictPath atomically:YES]; 线。

    key: public.jpeg, value: assets-library://asset/asset.JPG?id=1000000001&amp;ext=JPG

    你得到了 keypublic.jpegvalue

    asassets-library://asset/asset.JPG?id=1000000001&ext=JPG
    

    这是一个NSURL 对象,所以当你使用时。

    [[aDict valueForKey:key] writeToFile:dictPath atomically:YES];
    

    代码然后[aDict valueForKey:key]返回NSURL对象,它不能识别writeToFile:方法。

    【讨论】:

      【解决方案2】:

      writeToFile:atomically: 方法仅适用于 NSDictionary 和 NSArray。实际上,aDict 字典中有 NSURLs 对象。即使对于 NSString,它实际上已经被弃用了。

      由于您正在获取 URL,因此从它们获取 NSURL 的 absoluteString(返回 NSString)并使用 writeToFile:atomically:encoding:error: 将它们写入文件

      否则,您可以将aDict (NSDictionary) 对象本身写入文件。

      【讨论】:

      • 谢谢。所以我认为没有办法改变 NSURL 对象的类型?
      • 这可行,但编写NSDictionary 对象可能会更好,尤其是在从文件中读取时。我的问题中的链接显示了一个字符串字典(我可以复制)但我不能为我的字典做这个。实现应该一样吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多