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

ファイルを読み書きするときは、エラー パラメータを使用して、エラーが発生した場合に対処することを強くお勧めします。また、これはコードのデバッグに非常に役立ちます。

たとえば、あなたの場合、次のようにすることができます:

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 に答える