我有一个内存缓存,我想写在viewWillDisappear
上的文件中,并在viewDidLoad
上读回内存。我的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSArray *fileArray = [fileManager URLsForDirectory:NSCachesDirectory inDomains:NSUserDomainMask];
NSString *filePath = [NSString stringWithFormat:@"%@cache_%d", [fileArray lastObject], self.index];
NSURL *fileUrl = [NSURL URLWithString:filePath];
if ([fileManager fileExistsAtPath:filePath]) {
self.thumbnailsCache = [NSDictionary dictionaryWithContentsOfURL:fileUrl];
}
}
- (void)viewWillDisappear:(BOOL)animated
{
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSArray *fileArray = [fileManager URLsForDirectory:NSCachesDirectory inDomains:NSUserDomainMask];
NSString *filePath = [NSString stringWithFormat:@"%@cache_%d", [fileArray lastObject], self.index];
NSURL *fileUrl = [NSURL URLWithString:filePath];
[self.thumbnailsCache writeToURL:fileUrl atomically:YES];
}
基于一些NSLog和调试,它似乎成功写入文件,但在尝试阅读它时只是说找不到文件。我究竟做错了什么?感谢。
修改:self.thumbnailsCache
是NSDictionary
个NSData
个对象。
答案 0 :(得分:3)
您错误地创建了filePath
。
fileArray
是一个URL数组,而不是NSStrings(这是您的代码所假设的)。
因此,如果您将最后一个URL作为要使用的缓存目录,则可以通过以下方式创建缓存文件:
NSURL * cacheURL = (NSURL *)[fileArray lastObject];
if(cacheURL)
{
NSURL * fileToWrite = [cacheURL URLByAppendingPathComponent: [NSString stringWithFormat:@"%@cache_%d", self.index]];
}
或者,在您的代码的上下文中:
- (void)viewDidLoad
{
[super viewDidLoad];
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSArray *fileArray = [fileManager URLsForDirectory:NSCachesDirectory inDomains:NSUserDomainMask];
NSString *filePath = [NSString stringWithFormat:@"%@cache_%d", [fileArray lastObject], self.index];
NSURL * cacheURL = (NSURL *)[fileArray lastObject];
if(cacheURL)
{
NSURL * fileToRead = [cacheURL URLByAppendingPathComponent: [NSString stringWithFormat:@"%@cache_%d", self.index]];
if(fileToRead && ([fileManager fileExistsAtPath:fileToRead]) {
self.thumbnailsCache = [NSDictionary dictionaryWithContentsOfURL:fileToRead];
}
}
}
- (void)viewWillDisappear:(BOOL)animated
{
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSArray *fileArray = [fileManager URLsForDirectory:NSCachesDirectory inDomains:NSUserDomainMask];
NSString *filePath = [NSString stringWithFormat:@"%@cache_%d", [fileArray lastObject], self.index];
NSURL * cacheURL = (NSURL *)[fileArray lastObject];
if(cacheURL)
{
NSURL * fileToWrite = [cacheURL URLByAppendingPathComponent: [NSString stringWithFormat: @"%@cache_%d", self.index]];
if(fileToWrite)
{
[self.thumbnailsCache writeToURL:fileToWrite atomically:YES];
}
}
}