saveToFile问题

时间:2010-05-29 08:38:16

标签: iphone objective-c file

我遇到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];

}

2 个答案:

答案 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并将您的文件写入此返回的路径。您无需担心设备或模拟器。