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

Unk*_*Bit 3 iphone nsfilemanager file-exists ios ios8

我的应用程序在iOS 7中完美运行,现在我在切换到iOS 8 SDK后面临一些新的错误.

对于Ex.[NSFileManager defaultManager]文件存在检查方法(fileExistsAtPath:)不再有效.以下是我的代码中有关当前情况的详细信息:

  1. 这是代码块,其条件永远不会变为True:

    File *tempFile = currentMessage.contains;
    NSString *address = tempFile.thumbAddress;
    
    if ([[NSFileManager defaultManager] fileExistsAtPath:currentMessage.contains.thumbAddress])
    {
        image = [UIImage imageWithContentsOfFile:currentMessage.contains.thumbAddress];
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我在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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我检查了Finder以查看文件是否确实存在(地址是从控制台复制的,因此在检查路径和文件存在时不会出现错误输入和拼写错误):

在此输入图像描述

但是if因为fileExistsAtPath:返回而没有执行该块NO.

我错过了什么,或者只是新SDK的错误?(因为它与SDK 7.1.1完美配合)

任何建议都非常感谢.

谢谢

Kev*_*sch 7

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

/Users/Unkn0wn/Library/Developer/.../Application/ABCD/
Run Code Online (Sandbox Code Playgroud)

更新应用程序时,目录将更改,例如:

/Users/Unkn0wn/Library/Developer/.../Application/EFGH/
Run Code Online (Sandbox Code Playgroud)

因此,如果您在应用的第一个版本中保存图像的完整路径,例如:

ABCD/yourImage.jpg
Run Code Online (Sandbox Code Playgroud)

并尝试使用新版本的应用程序检索此图像,此图像将不再被找到,因为您的图像现在将在路径中:

EFGH/yourImage.jpg
Run Code Online (Sandbox Code Playgroud)

希望它有所帮助!


编辑

也许你的绝对路径不正确.尝试使用相对路径调用它:

NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
path = [path stringByAppendingString:@"FileAt141406917489510096thumbnail.jpg"];

NSData *imageData = [NSData dataWithContentsOfFile:path]; // Should be != nil
Run Code Online (Sandbox Code Playgroud)