2012-03-24 5 views
-2

これは私のコードです。以前はNSDictionaryが何かに使われていましたが、問題を見つけようとすると一時的に削除されました。writeToPath:原子的に:なぜこれが失敗しているのかわからない

NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Entries/"]; 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    BOOL isDirectory = NO; 
    BOOL directoryExists = [fileManager fileExistsAtPath:path isDirectory:&isDirectory]; 
    if (!directoryExists) { 
     [fileManager createDirectoryAtPath:path withIntermediateDirectories:NO attributes:nil error:nil]; 
    } 

    if ([self.pathName isEqualToString:@""] || self.pathName == nil) { 
    self.pathName = [NSString stringWithFormat:@"%@.JEntry", [JMedia generateUuidString]]; 
    } 

    NSString *entryPath = [path stringByAppendingPathComponent:self.pathName]; 

    NSDictionary *dictionary; 

    NSLog(@"entrypath: %@", entryPath); 

    BOOL success = [dictionary writeToFile:entryPath atomically:YES]; 

    NSLog(@"success: %i", success); 

のNSLog:

entrypath: /var/mobile/Applications/1B838285-8326-427A-8AC5-0D5567C3CD81/Documents/Entries/70AFCF6D-540E-436E-9989-68793500E35B.JEntry 
success: 0 
+0

シムのドキュメントディレクトリを調べてファイルが存在するかどうか確認しましたか? – CodaFi

+0

'[JMedia generate UuidString]'メソッドは完全にランダムな文字列を返すので、すでに存在することはできません。 – Andrew

+1

'dictionary'はゼロになりますので、これは決してうまくいかないでしょう。 – jrturton

答えて

2

問題はdictionarydocumentaionが言うようにプロパティリストオブジェクトではありませんアイテムが含まれていることが考えられます。

この方法は、再帰的にすべて含まれているオブジェクトことを検証しますファイルを書き出す前のプロパティリストオブジェクト(NSData、NSDate、NSNumber、NSString、NSArray、NSDictionaryのインスタンス)であり、は、結果のファイルは有効なプロパティリストではないため、オブジェクトはプロパティリストオブジェクトではありません。

+0

私はそれを考えました。なぜ、私はNSDictionaryにオブジェクトを含まないようにしました。だから私はそれが問題ではないことを知っている。 – Andrew

+2

いいえ。現在のコードでは、 'NSDictionary'はオブジェクトを含まない辞書ではなく、' nil'です。だからあなたは今、 '成功:0'を得るのです。 – sch

関連する問題