iPhone:可以访问Simulator中的文档目录中的文件,但不能访问设备

时间:2010-03-26 20:07:56

标签: iphone iphone-sdk-3.0 ios-simulator

我正在编写一个应用程序,将捆绑包的某些内容复制到应用程序文档的目录中,主要是图像和媒体。然后,我从文档目录中的整个应用程序中访问此媒体。

这在模拟器中完全正常,但在设备上却没有。资产刚刚出现为空。我已经完成了NSLog,并且文件的路径看起来是正确的,我已经通过在控制台中转储文件列表来确认文件存在于目录中。

有什么想法吗?谢谢!

修改

这是复制到Document目录的代码

NSString *pathToPublicationDirectory = [NSString stringWithFormat:@"install/%d",[[[manifest objectAtIndex:i] valueForKey:@"publicationID"] intValue]];
    NSString *manifestPath = [[NSBundle mainBundle] pathForResource:@"content" ofType:@"xml" inDirectory:pathToPublicationDirectory];
    [self parsePublicationAt:manifestPath];

    // Get actual bundle path to publication folder
    NSString *bundlePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:pathToPublicationDirectory];
    // Then build the destination path
    NSString *destinationPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d", [[[manifest objectAtIndex:i] valueForKey:@"publicationID"] intValue]]];

    NSError *error = nil;
    // If it already exists in the documents directory, delete it
    if ([fileManager fileExistsAtPath:destinationPath]) {
        [fileManager removeItemAtPath:destinationPath error:&error];
    }
    // Copy publication folder to documents directory
    [fileManager copyItemAtPath:bundlePath toPath:destinationPath error:&error];

我正在使用此方法找出docs目录的路径:

- (NSString *)applicationDocumentsDirectory {
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

}

以下是我如何构建图像路径的示例

path = [NSString stringWithFormat:@"%@/%d/%@", [self applicationDocumentsDirectory], [[thisItem valueForKey:@"publicationID"] intValue], [thisItem valueForKey:@"coverImage"]];

3 个答案:

答案 0 :(得分:1)

事实证明,该设备上没有更新捆绑包,显然没有与模拟器相同的文件集。这篇博文有点帮助:http://majicjungle.com/blog/?p=123

基本上,我清理了构建并删除了应用程序并首先直接安装到设备而不是模拟器。有趣的东西。

答案 1 :(得分:0)

我没有看到documentsDirectory的定义位置。

NSString *destinationPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d", [[[manifest objectAtIndex:i] valueForKey:@"publicationID"] intValue]]];

也许以下内容可以解决问题

NSString *destinationPath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:[NSString stringWithFormat:@"%d", [[[manifest objectAtIndex:i] valueForKey:@"publicationID"] intValue]]];

答案 2 :(得分:0)

您的副本代码看起来不错,而且您说您没有错误。

但我很感兴趣“资产刚刚出现。”您确定稍后使用完全同名来访问文件名吗?

与模拟器不同,真正的iPhone有一个区分大小写的文件系统。