从应用包中复制文件时出错

时间:2014-08-20 06:50:06

标签: ios objective-c file-io nsfilemanager

我使用了FireFox附加SQLite Manager,创建了一个数据库,它以#34; DB.sqlite"的形式保存到我的桌面。我将文件复制到项目的支持文件中。但是当我运行应用程序时,我立即收到错误

  

"断言失败 - [AppDelegate copyDatabaseIfNeeded],/ Users / Mac /Desktop / Note / Note / AppDelegate.m:32 2014-08-19 23:38:02.830   注意[28309:60b] 由于未捕获的异常而终止应用   ' NSInternalInconsistencyException',原因:'无法创建可写   带有消息的数据库文件'操作无法完成。   (可可错误4。)'。'第一次抛出调用堆栈:" ...

以下是发生错误的App Delegate Code

-(void) copyDatabaseIfNeeded
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSString *dbPath = [self getDBPath];
    BOOL success = [fileManager fileExistsAtPath:dbPath];

    if (!success)
    {
        NSString *defaultDBPath = [[ [NSBundle mainBundle
                                       ] resourcePath] stringByAppendingPathComponent:@"DB.sqlite"];
        success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];
        if (!success)
            NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);

    }
}

我对Sqlite很新,所以我可能没有在FireFox Sqlite管理器中正确创建数据库,或者我没有"#34;正确"复制.sqlite文件? (我确实检查了sqlite中的目标成员资格,并且它正确选择了我的项目。此外,.sqlite文件名完全匹配。)

1 个答案:

答案 0 :(得分:1)

在iOS中,您无法在应用的捆绑中写入文件。整个包是只读的。    您应该在NSDocumentDirectory中创建数据库(sqlite文件)以便对其进行处理。

请访问以下网站获取教程:    http://objectivecwithsuraj.blogspot.in/2012/10/database-implementation-using-sqlite-in.html

示例代码:    https://github.com/surajwebo/SQLite-Demonstration-