我遇到NSData writeToFile问题。 我已经实现了下面的代码,但我有一个异常。 当我在模拟器上运行程序时,会创建新文件并存储信息;当我在我的设备中构建应用程序时,不会创建该文件。 调试不会给我任何错误,但不保存任何东西。 你能帮助我吗? 非常感谢,对不起我的英语。
-(void)saveXML:(NSString*)name:(float)x:(float)y:(float)z{
NSMutableData *data = [NSMutableData data];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver setOutputFormat:NSPropertyListXMLFormat_v1_0];
[archiver encodeFloat:x forKey:@"x"];
[archiver encodeFloat:y forKey:@"y"];
[archiver encodeFloat:z forKey:@"z"];
[archiver encodeObject:name forKey:@"name"];
[archiver finishEncoding];
BOOL result = [data writeToFile:@"XML Position" atomically:YES];
if(result)
[self updateTextView:@"success"];
[archiver release];
}
答案 0 :(得分:2)
您无法写入iPhone中的当前工作目录,因为您在沙箱中运行。此外,您应该检查result
的值。如果它是NO
,那么你的写入失败了。相反,您必须找到文档目录并在那里编写文件:
-(void)saveXML:(NSString*)name:(float)x:(float)y:(float)z{
NSMutableData *data = [NSMutableData data];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver setOutputFormat:NSPropertyListXMLFormat_v1_0];
[archiver encodeFloat:x forKey:@"x"];
[archiver encodeFloat:y forKey:@"y"];
[archiver encodeFloat:z forKey:@"z"];
[archiver encodeObject:name forKey:@"name"];
[archiver finishEncoding];
NSString* filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"XML Position"];
BOOL result = [data writeToFile:filePath atomically:YES];
if(result)
[self updateTextView:@"success"];
[archiver release];
}
答案 1 :(得分:0)
只需使用NSSearchPathForDirectoriesInDomains并将您的文件写入此返回的路径。您无需担心设备或模拟器。