在我的应用中,用户可以选择带有弹出对话框的图像。第一次这样做时,一切都按预期工作,并且在添加图像文件时,将调用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];
编辑:如果我在方法调用之前添加“dir = NO”它似乎工作,但感觉就像一个黑客。
答案 0 :(得分:6)
在检查第二个(输出)参数的内容之前,您应该始终检查-[NSFileManager fileExistsAtPath:isDirectory:]
的返回值。仅当方法返回YES
时,输出参数才有意义。这在documentation:
返回时,如果path是目录或者最终路径元素是指向目录的符号链接,则包含
YES
,否则包含NO
。 如果路径不存在,则返回值未定义。如果您不需要此信息,请传递NULL
。
如果方法返回NO
,则路径不存在或您的应用程序无法访问它。如果确实存在,请检查您的路径是否为完整路径(例如,它不应以~
开头)。
此外,在将路径传递给-[NSURL path]
时,您应该使用-[NSURL absoluteString]
而不是NSFileManager
。