Ios fileExistsAtPath:对存在的文件返回否

Ios fileExistsAtPath:对存在的文件返回否,ios,Ios,在我的代码fileExistsAtPath:中的某一点上,对于我已确认存在的文件,返回NO。我一直在抓挠我的头,不明白为什么它不工作,所以把它改成这个代码,因为这个目录绝对存在,但如果它没有被创建 NSError* err = nil; NSURL *dir = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory

在我的代码fileExistsAtPath:中的某一点上,对于我已确认存在的文件,返回NO。我一直在抓挠我的头,不明白为什么它不工作,所以把它改成这个代码,因为这个目录绝对存在,但如果它没有被创建

NSError* err = nil;
NSURL *dir = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory
                                                       inDomain:NSUserDomainMask
                                              appropriateForURL:nil   
                                                         create: YES
                                                          error:&err];
BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:[dir absoluteString]];
运行此代码后,应用程序目录文件夹存在,err为0,exists为NO

这怎么可能


TIA

您应该使用
[dir path]
,而不是
[dir absoluteString]
路径和url之间有区别。unix表示中的路径是特定文件或目录所在的位置。像
“/Users/username/Desktop/myfile.txt”

其中,url不仅包含位置,还包含方案,例如:http://或https://在我们的例子中是文件url
(file:///Users/username/Desktop/myfile.txt)

fileExistsAtPath
removitematpath
这样的方法需要参数中的路径,而不是url

而像
copyitematture:toURL:error:(NSError*_Nullable*)error
这样的方法需要一个url


使用
NSURL
对象的
path
属性检索路径
absoluteString
为您提供了方案的路径。

我的头撞了几个小时的墙。显然,每次在xcode中运行(在模拟器上),应用程序目录路径都在变化。它的UUID部分。 因此,我没有存储完整路径,而是持久化了路径后缀 并在其前面加上任何隐含的存储类:临时的、缓存的 或文档:-[您了解为什么有时必须在设备上运行
即使您没有探索金属、GLES或多点触控的深度?;^)

您也没有检查URLForDirectory…方法是否返回nil。此外,文档中没有指出创建操作是同步还是异步的,但请尝试在文件退出前延迟几秒钟:调用并查看结果是否为c正如我所提到的,hanges.Err是nil。此外,dir被正确地填充了目录的路径(如果我在控制台中po它或NSLog它,它的内容被正确地设置)。在调用此代码之前,目录已经存在了。如果我在示例中运行两次应用程序,我仍然会发现exists BOOL被设置为0。为什么要使用[dir absoluteString]而不是[dir path]?您能注意到让我花费一个小时左右调试代码的mf差异吗?path返回一个常规路径。absoluteString返回一个文件:///url作为字符串。
(lldb)print fileURL.path(string!)$R0=“/Users/joshwisenbaker/Library/Developer/CoreSimulator/Devices/4ED0C33D-A9AB-49EF-9AD3-13396E7C3CCA/data/Containers/Shared/AppGroup/D2180E2E-A409-430E-AC47-C713547417/jobs.plist”(lldb)打印文件URL.absoluteString(字符串!)$R1=”file:///Users/joshwisenbaker/Library/Developer/CoreSimulator/Devices/4ED0C33D-A9AB-49EF-9AD3-13396E7C3CCA/data/Containers/Shared/AppGroup/D2180E2E-A409-430E-AC47-C71353547417/jobs.plist“
我正在使用path,但每次都返回false