Iphone 从字典到URL写入/读取的奇怪行为
我在网站上到处寻找类似的问题,但是我发现的其他问题的修复都没有帮助,所以我可能是看错了什么。无论如何,这是我的代码:Iphone 从字典到URL写入/读取的奇怪行为,iphone,ios,ipad,nsurl,nsfilemanager,Iphone,Ios,Ipad,Nsurl,Nsfilemanager,我在网站上到处寻找类似的问题,但是我发现的其他问题的修复都没有帮助,所以我可能是看错了什么。无论如何,这是我的代码: NSFileManager *fm = [[NSFileManager alloc] init]; NSError *err = nil; NSURL *ASD = [fm URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YE
NSFileManager *fm = [[NSFileManager alloc] init];
NSError *err = nil;
NSURL *ASD = [fm URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:&err];
if (!err) {
NSLog(@"writing file");
NSURL* path = [NSURL URLWithString:@"license.plist" relativeToURL:ASD];
[dict writeToURL:path atomically:NO];
NSString* content = [NSString stringWithContentsOfURL:path encoding:NSUTF8StringEncoding error:&err];
if (!err) {
NSLog(@"File:%@",content);
}
else
{
NSLog(@"Error opening file: %@",err);
}
return YES;
}
考虑到dict是一个有效的字典(EDIT:做出了错误的假设,即即使文件是空的,它也会初始化字典,因此即使文件是空的,也会添加一个空的init),我得到以下日志消息:
2011-09-07 15:59:58.883 iActNow[10572:707]正在写入文件
2011-09-07 15:59:58.889 iActNow[10572:707]打开文件时出错:错误
Domain=nscocaerorrordomain Code=260“无法执行该操作。”
已完成。(Cocoa错误260。)“UserInfo=0x4ba4d0
{NSFilePath=/var/mobile/Applications/6BA775C6-29F6-4362-8860-9ADF84598531/Library/Application
Support/license.plist,NSUnderlyingError=0x497080“操作
无法完成。没有这样的文件或目录“}
所以不管出于什么原因,它实际上并没有写入文件。有什么想法吗?
URLFORD目录:。。。inDomain:…
仅返回请求的标准目录应该位于的路径
它不能确保此目录实际存在
我想ASD不是这样的。您可能需要创建此目录(也可能需要创建中间目录)。我通过替换此调用测试了您的代码:
[dict writeToURL:path atomically:NO];
关于这一点:
[@"Foo" writeToURL:path atomically:NO];
并且文件被正确地存储
我敢打赌,在dict
中,您持有的自定义对象NSDictionary
无法根据定义(即苹果规范)写入文件。您可能需要使用另一种方式将数据存储到文件中-也许可以帮助您
编辑:我刚刚注意到您将文件命名为“license.plist”-请查看的“读取和写入属性列表数据”部分,原因是NSURL无法保存到磁盘我不相信,要先保存NSURL,您需要使用以下命令将其更改为NSString:
[SomeUrl absoluteString]
然后将其保存到磁盘,当您要加载它时,必须将其加载到字符串中,然后使用:
[TheString absoluteURL]
这适用于NSArrays和NSDIctionary等其他对象中的NSURL该消息的{create:YES}部分没有告诉它如果目录不存在就创建目录?喔,对不起,忘了一直水平滚动,你是对的。没问题^还有其他想法吗?