3

私はこれを理解しようと過去数時間を費やしてきましたが、アイデアが尽きてしまいました。

私がやろうとしているのはオブジェクトをアーカイブすることだけですが、メソッドarchiveRootObjectは戻り続けますNO

これが私のコードです:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cacheDirectory = [paths objectAtIndex:0];
cacheDirectory = [cacheDirectory stringByAppendingPathComponent:@"MyAppCache"];
NSString *fullPath = [cacheDirectory stringByAppendingPathComponent:@"archive.data"];

if(![[NSFileManager defaultManager] fileExistsAtPath:fullPath]){
    [[NSFileManager defaultManager] createDirectoryAtPath:fullPath withIntermediateDirectories:YES attributes:nil error:nil];
}

NSArray *array = [NSArray arrayWithObjects:@"hello", @"world", nil];
NSLog(@"Full Path: %@", fullPath);
BOOL res = [NSKeyedArchiver archiveRootObject:array toFile:fullPath];

if(res){
    NSLog(@"YES");
}else{
    NSLog(@"NO");
}

これを実行するたびに、印刷されNOます。

どんな助けでも大歓迎です!

4

2 に答える 2

6

パスを使用してディレクトリを作成fullPathし、同じパスにファイルを書き込もうとします。このようなファイルでディレクトリを上書きすることはできません。文字列を使用cacheDirectoryしてディレクトリを作成します。

于 2013-01-14T21:09:29.170 に答える
1

NSString *cacheDirectory は変更可能な文字列ではなく、初期化した後、それを変更しようとするため、最上位のディレクトリに書き込みます。

簡単に修正するには、次を試してください。

NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,   NSUserDomainMask, YES);
NSString *documentPath = ([documentPaths count] > 0) ? [documentPaths objectAtIndex:0] : nil;
NSString *documentsResourcesPath = [documentPath  stringByAppendingPathComponent:@"MyAppCache"];

NSString *fullPath = [documentsResourcesPath stringByAppendingPathComponent:@"archive.data"];
于 2013-01-14T21:09:32.167 に答える