1

我正在尝试将文件存储在 NSApplicationSupportDirectory 中,因为我的应用程序中有一个预加载的文件夹,我想在应用程序初始化后添加文件。我正在尝试 NSLog 文件的内容,所以我可以看看它是否真的有效。从调试器中,我可以看到内容是 ,我不是什么意思。有人吗?

NSString *document = [NSString stringWithFormat:@"%@ %@ %@ %@ %@", description, focus, level, equipment, waterDepth];

//NSLog(@"%@", document);

//get the documents directory:
NSArray *paths = NSSearchPathForDirectoriesInDomains
(NSApplicationSupportDirectory, NSUserDomainMask, YES);
NSString *supportDirectory = [paths objectAtIndex:0];

//filename
NSString *filename = [NSString stringWithFormat:@"%@/%@", supportDirectory,[_nameTextField.text stringByAppendingString:@".txt"]];
NSLog(@"%@", supportDirectory);
NSLog(@"%@", filename);

[document writeToFile:filename atomically:NO encoding:NSStringEncodingConversionAllowLossy error:nil];

NSString *content = [[NSString alloc]initWithContentsOfFile:filename usedEncoding:nil error:nil];
NSLog(@"%@", content);
4

2 回答 2

9

您没有传递字符串编码,而是传递NSStringEncodingConversionAllowLossy了一个选项,该选项会影响某些方法(不是您正在使用的方法)的编码转换方式。你需要通过类似的东西NSUTF8StringEncoding

于 2012-04-27T23:00:14.233 回答
1

写入或读取文件时,强烈建议使用 error 参数并处理出现错误的情况。此外,这对于帮助您调试代码非常有用。

例如,在您的情况下,您可以这样做:

NSError *error = nil;
BOOL success = [document writeToFile:filename atomically:NO encoding:NSStringEncodingConversionAllowLossy error:&error];

if (!success) {
    NSLog(@"Could not write file: %@", error);
} else {
    NSString *content = [[NSString alloc]initWithContentsOfFile:filename usedEncoding:nil error:&error];
    if (!content) {
        NSLog(@"Could not read file: %@", error);
    }
}

如果您收到一条错误消息,表示The operation couldn’t be completed. No such file or directory您之前没有创建该文件夹。因此,您在尝试向其添加内容之前创建它:

NSString *supportDirectory = [paths objectAtIndex:0];
NSError *error = nil;
BOOL success;
if (![[NSFileManager defaultManager] fileExistsAtPath: supportDirectory]) {
    success = [[NSFileManager defaultManager] createDirectoryAtPath:supportDirectory withIntermediateDirectories:YES attributes:nil error:&error];
    if (!success) {
        NSLog(@"Could not create directory: %@", error);
    }
}
于 2012-04-27T16:37:38.103 回答