NSKeyedArchiver archiveRootObject不停地返回NO

我花了几个小时试图弄清楚这个,但是我已经没有想法了。

所有我想要做的是存档一个对象,但方法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

任何帮助,将不胜感激!

您创build一个path为fullPath的目录,然后尝试在同一path下写入该文件。 用这样的文件覆盖目录是不可能的。 使用您的cacheDirectorystring来创build您的目录。

NSString * cacheDirectory不是一个可变string,在你初始化之后,你试图修改它,所以你正在写入顶层目录。

为了快速修复,请尝试:

 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"];