4

iPhone5.1シミュレータのドキュメントフォルダにデータを保存しようとしています。

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, @"myData.json"];

if ([[NSFileManager defaultManager] isWritableFileAtPath:filePath]) {
    NSLog(@"Writable");
}else {
    NSLog(@"Not Writable");
}

私はいつも「書き込み不可」を持っています。何か案が?私を助けてください。

4

4 に答える 4

20

ファイルを作成していないためか、テストしたファイルが存在しません。:)

あなたは問題を見つけるためにこれを行うことができます、

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, @"myData.json"];
NSLog(@"filePath %@", filePath);

if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) { // if file is not exist, create it.
    NSString *helloStr = @"hello world";
    NSError *error;
    [helloStr writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];
}

if ([[NSFileManager defaultManager] isWritableFileAtPath:filePath]) {
    NSLog(@"Writable");
}else {
    NSLog(@"Not Writable");
}
于 2012-06-15T15:40:16.533 に答える
5

これを試して:

NSString *data = .... // your json representation
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"myData.json"];
[data writeToFile:appFile atomically:YES encoding:NSUTF8StringEncoding error:nil];
于 2012-06-15T15:59:11.383 に答える
3

と交換して[NSString stringWithFormat:]ください[NSString stringByAppendingPathComponent:]。これは実行可能なパスを作成するあなたの能力を作るか、または壊します、またはそれで私の経験は私に教えてくれました。

さらに、この種のことは、シミュレーターと実際のデバイスで書き込むときに発生します。シミュレーターは、デバイスよりも間違ったパスに物事を保存している場合にはるかに寛容であり、悪名高い「シミュレーターで動作します!」に遭遇するだけでI/Oが正常に動作することがよくあります。ピット。 stringWithFormat:陥る方法の1つにすぎません。

于 2012-06-15T15:47:48.393 に答える
1

ドキュメントディレクトリパスを取得

+(NSURL *)getDocumentsDirectoryPath
{
    return [[[NSFileManager defaultManager]URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]lastObject];
}

ファイルの終わりにデータを書き込む

+(void)saveText:(NSString *)textTobeSaved atPath:(NSString*)fileName
{
    NSString *filePath = [NSString stringWithFormat:@"%@.text",fileName];

    NSString *path = [[self getDocumentsDirectoryPath].path
                      stringByAppendingPathComponent:filePath];
    NSFileHandle *fileHandler = [NSFileHandle fileHandleForWritingAtPath:path];
    if(fileHandler == nil) {
        [[NSFileManager defaultManager] createFileAtPath:path contents:nil attributes:nil];
        fileHandler = [NSFileHandle fileHandleForWritingAtPath:path];
    } else {
        textTobeSaved = [NSString stringWithFormat:@"\n-----------------------\n %@",textTobeSaved];
        [fileHandler seekToEndOfFile];
    }

    [fileHandler writeData:[textTobeSaved dataUsingEncoding:NSUTF8StringEncoding]];
    [fileHandler closeFile];
}
于 2017-11-02T09:21:11.027 に答える