如果我取用我的沙箱的应用支持目录NSFileManager:URLForDirectory
然后我得到以下网址:
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查找/替换操作和差异导致的不匹配。 我碰到的这种差异的其它地方之前,然后我的解决方案是(通过使用URL的路径NSURL:path
)而不是原始网址,但这不会在这种情况下,作为工作产生的路径是:
/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/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:
返回相同的路径,或者如果不是在那里提取的子路径,以我目前做的另一种优雅的方式?