我一直在网站上寻找类似的问题,但是我找到的任何其他问题的修复都没有帮助,所以也许我看错了什么。无论如何,这是我的代码:
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是一个有效的词典(编辑:做出了错误的假设,即使文件为空它仍会启动词典,所以即使文件为空也添加了一个空的初始) ,我得到以下日志消息:
2011-09-07 15:59:58.883 iActNow [10572:707]写文件 2011-09-07 15:59:58.889 iActNow [10572:707]打开文件时出错:错误 Domain = NSCocoaErrorDomain Code = 260“操作不能 完成。 (可可错误260.)“UserInfo = 0x4ba4d0 {NSFilePath =的/ var /移动/应用/ 6BA775C6-29F6-4362-8860-9ADF84598531 /库/应用程序 支持/ license.plist,NSUnderlyingError = 0x497080“操作 无法完成。没有这样的文件或目录“}
因此,无论出于什么原因,它实际上并没有写入文件。有什么想法吗?
答案 0 :(得分:1)
我通过替换此调用测试了您的代码:
[dict writeToURL:path atomically:NO];
这一个:
[@"Foo" writeToURL:path atomically:NO];
并且文件存储得当。
我敢打赌,在dict
你持有NSDictionary
无法根据定义写入文件的自定义对象(即Apple规范)。您可能必须使用不同的方式将数据存储到文件中 - 也许Archives and Serializations Programming Guide可以帮助您?
编辑:我刚刚注意到您将文件命名为“license.plist” - 请查看Property List Programming Guide
的“读写属性列表数据”部分答案 1 :(得分:0)
URLForDirectory:... inDomain:...
仅返回所请求的标准目录所在的路径。
它不能确保该目录确实存在。
我想ASD的情况并非如此。您可能需要创建此目录(也可能是中间目录)。
答案 2 :(得分:0)
这样做的共鸣是NSURL无法保存到磁盘我不相信,首先要保存NSURL,你需要使用以下命令将其更改为NSString:
[SomeUrl absoluteString]
然后将其保存到磁盘,当您要加载它时,必须将其加载到字符串中然后使用:
[TheString absoluteURL]
这适用于其他对象(如NSArrays和NSDictionaries)中的NSURL