fileExistsAtPath:在iOS 8 SDK中未返回正确的值

fileExistsAtPath:在iOS 8 SDK中未返回正确的值,ios,iphone,ios8,nsfilemanager,file-exists,Ios,Iphone,Ios8,Nsfilemanager,File Exists,我的应用程序在iOS 7中运行得很好,现在我在切换到iOS 8 SDK后面临一些新的bug 例如,[NSFileManager defaultManager]文件存在性检查方法(fileExistsAtPath:)不再工作。以下是我的代码中有关当前情况的详细信息: 这是一个条件永远不会变为True的代码块: File *tempFile = currentMessage.contains; NSString *address = tempFile.thumbAddress; if ([[NSF

我的应用程序在iOS 7中运行得很好,现在我在切换到iOS 8 SDK后面临一些新的bug

例如,
[NSFileManager defaultManager]
文件存在性检查方法(
fileExistsAtPath:
)不再工作。以下是我的代码中有关当前情况的详细信息:

  • 这是一个条件永远不会变为True的代码块:

    File *tempFile = currentMessage.contains;
    NSString *address = tempFile.thumbAddress;
    
    if ([[NSFileManager defaultManager] fileExistsAtPath:currentMessage.contains.thumbAddress])
    {
        image = [UIImage imageWithContentsOfFile:currentMessage.contains.thumbAddress];
    }
    
  • 我在if之前放置了一个断点,并对其进行了跟踪,以查看其包含的内容:

    Printing description of address:
    /Users/Unkn0wn/Library/Developer/CoreSimulator/Devices/C07E1D76-372E-4C9A-8749-50D369294FBA/data/Containers/Data/Application/1DC7DB3A-B0A2-43AE-9EDA-3E121786D1AA/Documents/FileAt141406917489510096thumbnail.jpg
    
  • 我已经检查了Finder以查看文件是否确实存在(该地址是从控制台复制的,因此在检查路径和文件存在时不会出现打字错误):

  • 但是,如果由于
    文件existsatpath:
    返回
    否,因此未执行
    块,则返回

    我是否遗漏了什么,或者只是新SDK的一个bug?(因为它与SDK 7.1.1完美配合)

    如有任何建议,我们将不胜感激


    谢谢

    如果
    thumbAddress
    是完整路径(不是相对路径),则在更新应用程序时可能会导致错误,因为应用程序文件夹会发生更改,例如,应用程序的第一个版本可能位于该路径:

    /Users/Unkn0wn/Library/Developer/.../Application/ABCD/
    
    更新应用程序时,目录将更改,例如:

    /Users/Unkn0wn/Library/Developer/.../Application/EFGH/
    
    因此,如果您在应用程序的第一个版本中保存图像的完整路径,如:

    ABCD/yourImage.jpg
    
    并尝试使用新版本的应用程序检索此图像,将不再找到此图像,因为您的图像现在位于以下路径:

    EFGH/yourImage.jpg
    
    希望有帮助


    编辑

    也许你的绝对路径是错误的。尝试使用相对路径调用它:

    NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
    path = [path stringByAppendingString:@"FileAt141406917489510096thumbnail.jpg"];
    
    NSData *imageData = [NSData dataWithContentsOfFile:path]; // Should be != nil
    

    这也可能是权限问题。如果它存在,但无法读取文件夹,则找不到它。我说的是单一版本,而不是更新应用程序!是的,显然这不仅仅是关于iOS 8的版本升级,而且是关于下次发布应用程序!尝试调用
    [NSData dataWithContentsOfFile:address]
    如果不选中
    fileExistsAtPath:
    ,您会得到
    nil
    还是图像数据?如果得到
    nil
    ,则可能是路径不正确。