Iphone Cocoa错误:创建SQLite数据库的可写副本时发生516

Iphone Cocoa错误:创建SQLite数据库的可写副本时发生516,iphone,objective-c,ios,sqlite,ios5,Iphone,Objective C,Ios,Sqlite,Ios5,我正在做一个小的数据库驱动的应用程序。我在xcode中的支持文件下有我的SQLite db文件。起初,当它在mainbundle中时,我试图向它写入数据,但无法。搜索之后,我找到了答案,并将代码改为以下内容 - (void)viewDidLoad { [super viewDidLoad]; BOOL success; NSFileManager *filemngr = [[NSFileManager alloc] init]; NSEr

我正在做一个小的数据库驱动的应用程序。我在xcode中的支持文件下有我的SQLite db文件。起初,当它在mainbundle中时,我试图向它写入数据,但无法。搜索之后,我找到了答案,并将代码改为以下内容

- (void)viewDidLoad
{
    [super viewDidLoad];

        BOOL success;
        NSFileManager *filemngr = [[NSFileManager alloc] init];
        NSError *error;
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
        NSString *documentDirectory = [paths objectAtIndex:0];
        NSString *writableDbPath = [documentDirectory stringByAppendingPathComponent:@"contacts.sqlite"];
        success = [filemngr fileExistsAtPath:writableDbPath];
        if(!success)
        {
            [status setText:@"Error occurred!"];
        }

        NSString *defaultDbPath = [[[NSBundle mainBundle] resourcePath]stringByAppendingPathComponent:@"contacts.sqlite"];
        success = [filemngr copyItemAtPath:defaultDbPath toPath:writableDbPath error:&error];
        if (!success)
        {
            [status setText:[error localizedDescription]];
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error!"
                                                            message:[error localizedDescription]
                                                           delegate:nil
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
            [alert show];
        }
    }
当我试图将文件复制到可写位置(其中显示UIAlertView)时,在最后一个if块中出现以下错误

无法完成该操作。(可可错误516)

谁能告诉我如何纠正这个错误吗


谢谢。

如果文件尚未复制到文档目录中,您希望将其复制到文档目录中。 在您的代码中,如果文件已经存在,那么您也尝试将其复制到文档目录。这将导致执行第二个
if(!success)
块。 更改您的方法,如:

- (void)viewDidLoad
{
    [super viewDidLoad];

        BOOL success;
        NSFileManager *filemngr = [[NSFileManager alloc] init];
        NSError *error;
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
        NSString *documentDirectory = [paths objectAtIndex:0];
        NSString *writableDbPath = [documentDirectory stringByAppendingPathComponent:@"contacts.sqlite"];
        success = [filemngr fileExistsAtPath:writableDbPath];
        if(!success)
        {
            NSString *defaultDbPath = [[[NSBundle mainBundle] resourcePath]stringByAppendingPathComponent:@"contacts.sqlite"];
        success = [filemngr copyItemAtPath:defaultDbPath toPath:writableDbPath error:&error];
          if (!success)
          {
            [status setText:[error localizedDescription]];
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error!"
                                                            message:[error localizedDescription]
                                                           delegate:nil
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
            [alert show];
          }
        }
    }

非常感谢米顿。这个错误消失了,但我还有一个小问题。现在在我的.h文件中,我有一个对数据库路径的引用,如下所示
NSString*databasePath
。在将数据保存到DB的.m文件中,我像这样检索该值<代码>常量聊天*dbpath=[databasePath UTF8String]。我必须为其分配新的
writeabledbpath
值吗?因为我现在无法保存数据。我在
viewDidLoad
方法中尝试了这个
databasePath=writeabledbpath
,但没有成功。我该怎么办?再次感谢:)@Isuru:您的数据库路径应该是文档目录中的路径。使用路径时需要指定路径