web-dev-qa-db-ja.com

iOS:キャッシュディレクトリのコンテンツを取得できません

キャッシュディレクトリのコンテンツを取得しようとしています:

NSError *error;
NSString *path = [[self.class cachesDirectoryURL] absoluteString];
NSArray *directoryItems = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error];

pathは正しいです。Finderにそれが存在し、ファイルが含まれていることがわかります。
directoryItemsnilであり、error

Error Domain=NSCocoaErrorDomain Code=260 "The folder “Caches” doesn’t exist." UserInfo={NSUnderlyingError=0x7982d2d0 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}, NSFilePath=file:///Users/seelts/Library/Developer/CoreSimulator/Devices/C1411C3D-91FB-4D91-83A4-D0747071AE36/data/Containers/Data/Application/800DE429-F10C-438E-BB04-2948C0B07E7C/Library/Caches/, NSUserStringVariant=(
    Folder
)}

私がどうかしましたか、まずいことでもありましたか?

11
seelts

間違ったパスを使用しています。アプリの正しいキャッシュディレクトリを取得するには、次を使用します。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cacheDirectory = [paths objectAtIndex:0];

cacheDirectoryでは、次のような文字列パスを受け取ります(fileスキームなし):

/Users/username/Library/Developer/CoreSimulator/Devices/D55805E2-50FF-4D8D-8D04-490001AD6071/data/Containers/Data/Application/DE437461-E0F8-4C11-861E-2D1C56CDF6F1/Library/Caches


コード全体:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cacheDirectory = [paths objectAtIndex:0];

NSError *error;
NSArray *directoryItems = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:cacheDirectory error:&error];
NSLog(@"%@", directoryItems);
14
shpasta

ここで@shpastaの回答に追加情報を追加します。キャッシュディレクトリ内に追加のフォルダがあり、それらのフォルダ内にいくつかのファイルを取得したいとします。これは、これらのフォルダー内のファイルにアクセスする方法です。

 NSArray *subFolders = [[NSFileManager defaultManager]subpathsAtPath:yourCacheDirectory];
 NSString* additionalParams;

for(NSString* sub in subFolders){
            if([sub containsString:@".log"]){
                 //Assuming you have .log file inside the folder.
                additionalParams = sub;
            }
        }

 NSString* fullFileURL = [NSString stringWithFormat:@"%@/%@",cacheDirectory,additionalParams];

これが、キャッシュディレクトリ内にあるフォルダ内のファイルにアクセスしようとしている人に役立つことを願っています。

0
iPhoneDeveloper