我一直在整个网站上寻找类似的问题,但我发现的任何其他问题的修复都没有帮助,所以也许我看错了或者是什么。无论如何,这是我的代码:
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 是有效的字典(编辑:做出了错误的假设,即使文件为空,它仍然会初始化字典,因此即使文件为空,也添加了一个空的 init) ,我收到以下日志消息:
2011-09-07 15:59:58.883 iActNow[10572:707] writing file 2011-09-07 15:59:58.889 iActNow[10572:707] Error opening file: Error Domain=NSCocoaErrorDomain Code=260 "The operation couldn’t be completed. (Cocoa error 260.)" UserInfo=0x4ba4d0 {NSFilePath=/var/mobile/Applications/6BA775C6-29F6-4362-8860-9ADF84598531/Library/Application Support/license.plist, NSUnderlyingError=0x497080 "The operation couldn’t be completed. No such file or directory"}
因此,无论出于何种原因,它实际上并没有写入文件。有什么想法吗?
最佳答案
我通过替换此调用来测试您的代码:
[dict writeToURL:path atomically:NO];
这个:
[@"Foo" writeToURL:path atomically:NO];
并且文件已正确存储。
我敢打赌,在 dict
中,您持有一个自定义对象,而 NSDictionary
无法根据定义(即按照 Apple 规范)写入文件。您可能必须使用不同的方式将数据存储到文件中 - 也许 Archives and Serializations Programming Guide可以帮你?
编辑:我刚刚注意到您将文件命名为“license.plist” - 请查看Property List Programming Guide的“读取和写入属性列表数据”部分。
关于iphone - 从字典到 URL 写入/读取的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7340589/