1

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オブジェクトNSDictionaryNSDataです。

4

1 に答える 1

3

filePath間違っ て作成しています。

fileArrayNSStrings ではなく、URL の配列です (これは、コードが想定しているものです)。

したがって、最後の 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];
        }
    }
}
于 2012-04-26T07:16:33.073 に答える