代码之家  ›  专栏  ›  技术社区  ›  Omkar Jadhav

sqlite步骤失败:尝试使用包装器写入只读数据库

  •  4
  • Omkar Jadhav  · 技术社区  · 14 年前

    在使用此代码复制数据库时,我不断收到错误“sqlite step failed:attest to write a readonly database”:

    -(void)createEditableCopyOfDatabaseIfNeeded 
    {
        // Testing for existence
        BOOL success;
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSError *error;
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                               NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *writableDBPath =
                [documentsDirectory stringByAppendingPathComponent:@"Money.sqlite"];
    
        success = [fileManager fileExistsAtPath:writableDBPath];
        if (success)
            return;
    
        // The writable database does not exist, so copy the default to
        // the appropriate location.
        NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath]
                stringByAppendingPathComponent:@"Money.sqlite"];
        success = [fileManager copyItemAtPath:defaultDBPath
                               toPath:writableDBPath
                               error:&error];
        if(!success)
        {
            NSAssert1(0,@"Failed to create writable database file with Message : '%@'.",
                     [error localizedDescription]);
        }
    }
    

    我在appdelegate中使用上述代码 而这个:

    NSString *writableDBPath =
            [[NSBundle mainBundle] pathForResource:@"Money"
                                   ofType:@"sqlite"];
    

    在viewcontroller.m中

    我在用 http://th30z.netsons.org/2008/11/objective-c-sqlite-wrapper/ 我做错什么了?

    这是一次又一次…它以前工作得很好,但问题又开始了。

    1 回复  |  直到 14 年前
        1
  •  7
  •   Vladimir    14 年前

    问题是你不能给你的包写任何东西。若要更改数据库,您需要将其复制到应用程序的“文档”或“缓存”文件夹并使用该副本。