我正在读取一组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] key:public.jpeg, value:assets-library://asset/asset.JPG?id = 1000000001&amp; 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,并且正在模拟器上运行。
答案 0 :(得分:2)
问题是
[[aDict valueForKey:key] writeToFile:dictPath atomically:YES];
行。
与key: public.jpeg, value: assets-library://asset/asset.JPG?id=1000000001&ext=JPG
public.jpeg
, 值 为
asassets-library://asset/asset.JPG?id=1000000001&ext=JPG
这是一个NSURL
对象,所以当你使用时。
[[aDict valueForKey:key] writeToFile:dictPath atomically:YES];
然后代码[aDict valueForKey:key]
返回NSURL
无法识别writeToFile
:方法的对象。
答案 1 :(得分:1)
方法writeToFile:atomically:
仅适用于NSDictionary和NSArray。实际上你在aDict
字典中有NSURLs对象。即使对于NSString,实际上已经弃用了。
由于您正在获取URL,请从它们获取NSURL的absoluteString(返回NSString)并使用writeToFile:atomically:encoding:error:
将其写入文件
否则,您可以将aDict
(NSDictionary)对象本身写入文件。