我正在使用的iOS应用程序遇到了一个非常奇怪的问题。仅当我使用ad hoc分发测试应用程序时,效果才存在。更新应用程序(之前必须安装)后,它无法正常工作。我可以跟踪错误,这是由以下代码行引起的:
[fileManager createDirectoryAtPath:folder withIntermediateDirectories:YES attributes:nil error:&error];
现在你可以说,当然:不要写应用程序包本身,但基本路径是Documents文件夹,通过:
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = [dirPaths objectAtIndex:0];
imgDir = [docsDir stringByAppendingPathComponent:@"images"];
folder = [imgDir stringByAppendingPathComponent:md5]; // md5-Hash is created before
完整的错误消息(记录到iphone系统日志)是:
错误域= NSCocoaErrorDomain代码= 513“操作无法完成。(可可错误513)。”UserInfo = 0x14d44f30 {NSFilePath = / var / mobile / Applications / 280C6D36-3667-4589-A74F-42F3F17ABA71 / Documents / images / 39b6cd45a05a2276ef065b2ecf33b1eb,NSUnderlyingError = 0x14d4e340“操作无法完成。不允许操作”}
有趣的是,正如我所指出的,如果我在通过ad hoc发行版安装之前删除应用程序(Testflight到带有iOS 7.0.4的iPhone 5),则会创建文件夹并且应用程序按预期工作。我能找到的唯一引用是开发人员不使用stringByAppendingPathComponent或直接写入应用程序包。也许其他人遇到问题或有想法?
答案 0 :(得分:1)
我终于找到了无法创建文件夹的原因。之后它看起来非常简单和愚蠢,但如果您可以查看完整的源代码,您将会发现这是如何发生的。在我的辩护中,我不得不说我来到这个项目进行进一步开发,因为最初的开发人员离开了这个项目。为了更好地理解,我简化了代码。
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = [dirPaths objectAtIndex:0];
imgDir = [docsDir stringByAppendingPathComponent:@"images"];
imgDir实际上保存在userPreferences中,并且代理类总是返回保存的路径,这是一个非常糟糕的主意。在更新过程中,应用程序会获得一个新的guid,它反映在apps文档路径中。因此,尝试在先前版本文档文件夹中创建文件夹必须失败,因为它不再存在。我更正了代码,从不保存路径,并始终使用上面的代码返回当前代码。