我遇到了fileExistsAtPath:isDirectory的问题

LDK*_*LDK 1 cocoa objective-c

在我的应用程序中,用户可以使用弹出对话框选择图像.第一次这样做时,一切都按预期工作,并且在添加图像文件时,将调用isExistAtPath:isDirectory,并且dir返回NO.但是,当用户第二次选择图像时,fileExistsAtPath:isDirectory总是返回YES(即使它不是目录).

-(void) addImagesWithPath:(NSURL *)fileURL recursive:(BOOL) recursive{
  int i, n;
  BOOL dir;
  NSError *error;
  NSURL *newURL;

  [[NSFileManager defaultManager] fileExistsAtPath:[fileURL absoluteString] isDirectory:&dir];
Run Code Online (Sandbox Code Playgroud)

编辑:如果我在方法调用之前添加"dir = NO"它似乎工作,但它感觉像一个黑客.

小智 6

在检查第二个(输出)参数的内容之前,应始终检查返回值-[NSFileManager fileExistsAtPath:isDirectory:].输出参数仅在方法返回时才有意义YES.这在文档中描述:

返回时,包含YESif path是目录还是最终路径元素是指向目录的符号链接,否则包含NO.如果path不存在,则返回值未定义.通过NULL如果你并不需要这些信息.

如果方法返回,NO则路径不存在或您的应用程序无法访问它.如果确实存在,请检查您的路径是否为完整路径(例如,它不应该以路径开头~).

此外,您应该使用-[NSURL path]而不是-[NSURL absoluteString]传递路径时NSFileManager.