我正在使用NSKeyedArchiver
和NSKeyedUnarchiver
为我的应用实现缓存功能。
为了在每次启动应用程序时加载缓存文件,我将缓存文件存储在NSHomeDirectory()
下。代码(C函数)如下:
NSString* getArchivePathForId(NSString* modelId)
{
NSString *cacheIdentifier = @"CacheIdentifier";
NSString *archiveDirPath = [NSHomeDirectory() stringByAppendingFormat:@"/tmp/%@/cachedModel/%@", getAppVersion(), cacheIdentifier];
NSError* error;
if (![[NSFileManager defaultManager] fileExistsAtPath:archiveDirPath]) {
if (![[NSFileManager defaultManager] createDirectoryAtPath:archiveDirPath
withIntermediateDirectories:YES
attributes:nil
error:&error])
{
NSLog(@"Create directory tmp/cachedModel directory error: %@", error);
return nil;
}
}
NSString *archivePath = [archiveDirPath stringByAppendingFormat:@"/%@", modelId];
return archivePath;
}
只要应用程序正在运行或从后台模式恢复生效,它就可以正常工作。但是一旦应用程序终止并重新运行,缓存的存档文件就会被删除。
是否有任何方法可以保留存档文件,以便我可以加载上次启动应用时存储的缓存。
我已经意识到,每次启动应用程序时,NSHomeDirectory()
的应用程序ID部分都是不同的。这与我的问题有关吗?
答案 0 :(得分:0)
问题是顶层的“tmp”目录名称。通常文件保存在“Documents”目录下:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths firstObject];`
持久性缓存通常直接放在“库”下,使用NSLibraryDirectory
。
请参阅:File System Programming Guide
TMP / 使用此目录可以编写在应用程序启动之间不需要保留的临时文件。您的应用应该在不再需要时删除此目录中的文件;但是,当您的应用未运行时,系统可能会清除此目录。