を使用してサンドボックスの Application Support ディレクトリをフェッチNSFileManager:URLForDirectory
すると、次の URL が返されます。
file://localhost/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application%20Support/
ただしNSFileManager:enumeratorAtURL
、ディレクトリを検索するために使用すると、次の形式の URL が返されます。
file://localhost/private/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application%20Support/
URL の検索/置換操作を行っており、その違いによって不一致が発生するため、これが問題を引き起こしています。以前にこの種の違いに遭遇したことがあり、私の解決策はNSURL:path
、生の URL の代わりに URL のパスを使用することでしたが (を使用)、生成されたパスは次のとおりです。
/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application Support
/private/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application Support/
私がやろうとしているのはこれです: Application Support ディレクトリに同じ名前で異なる場所のファイルをいくつでも持つことができ、Application Support ディレクトリからの相対パスを抽出する必要があります。つまり、次の場合
/Application Support/abc/file.dat
/ApplicationSupport/abc/def/file.dat
「abc」と「abc/def」を抽出できるようにしたい。次のコードを使用してこれを行っていました。
NSArray *keys = [NSArray arrayWithObject:NSURLIsRegularFileKey];
NSDirectoryEnumerator *dirEnumerator = [self.fileManager enumeratorAtURL:[MyManager appSupportDirectory]
includingPropertiesForKeys:keys
options:NSDirectoryEnumerationSkipsHiddenFiles
errorHandler:nil];
for (NSURL *url in dirEnumerator)
{
if ( NSOrderedSame == [[url lastPathComponent] caseInsensitiveCompare:kFilename])
{
NSString *appSupportPath = [[MyManager appSupportDirectory] path];
NSString *pathToFile = [url path];
pathToFile = [pathToFile URLByDeletingLastPathComponent];
NSString *subPath = [pathToFile stringByReplacingOccurrencesOfString:appSupportPath withString:@""];
(MyManager:appSupportDirectory は NSFileManager:URLForDirectory を呼び出します: NSApplicationSupportDirectory を使用して)
enumeratorAtURL:
これは、同じパスを返すシミュレータでは正常に機能しURLFOrDirectory:
ますが、ハードウェアの違いにより失敗します。
同一のパスを取得enumeratorAtURL:
しURLForDirectory:
て返す方法はありますか、そうでない場合は、現在行っているサブパスを抽出する別のエレガントな方法がありますか?