iPhone:如何将文件从资源复制到文档?

时间:2011-01-20 04:04:19

标签: iphone

我刚刚开始使用iPhone开发。在我必须在tabbar控制器的表视图中显示存储在sqlite db中的一些数据的示例中,我不得不将sqlite文件从应用程序包移动到文档文件夹。

我使用了应用程序模板 - iOS>申请>适用于iPhone的基于窗口的应用程序(用于存储的核心数据)

在XCode生成的模板中(基本sdk设置为最新的iOS = 4.2),下面的代码就在那里......

- (NSURL *)applicationDocumentsDirectory {
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

在尝试获取文档文件夹的路径时,我使用了上面给出的方法......

NSString *documentDirectory = [self applicationDocumentsDirectory];

这会发出警告 - warning: incompatible Objective-C types initializing 'struct NSURL *', expected 'struct NSString *'

所以我把代码改为以下......

// Added the message absoluteString over here
NSString *documentDirectory = [[self applicationDocumentsDirectory] absoluteString];

NSString *writableDBPath = [documentDirectory stringByAppendingPathComponent:@"mydb.sqlite"];
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"mydb.sqlite"];
BOOL success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
if (!success) {
   NSLog(@"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}

和BOOM !!!它给出了错误 - 'Failed to create writable database file with message 'The operation couldn’t be completed. No such file or directory'.'

我应该如何找到文档目录的路径,因为XCode模板生成的方法applicationDocumentsDirectory对我不起作用。

此外,有人可以说明上面给出的applicationDocumentsDirectory方法的目的。

由于

2 个答案:

答案 0 :(得分:20)

这是一个简单的方法:

    NSFileManager *fmngr = [[NSFileManager alloc] init];
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"mydb.sqlite" ofType:nil];
    NSError *error;
    if(![fmngr copyItemAtPath:filePath toPath:[NSString stringWithFormat:@"%@/Documents/mydb.sqlite", NSHomeDirectory()] error:&error]) {
         // handle the error
         NSLog(@"Error creating the database: %@", [error description]);

    }
    [fmngr release];

答案 1 :(得分:5)

我几天前就遇到过这个问题。不要强行沿路径路径,包含NSURL路径。只需很短的时间就可以使用它们。

关于该方法,它只是要求系统将URL提供给应用程序的标准化文档目录。使用此以及关于放置新文件的位置的大多数内容都是正确的。