【发布时间】:2015-10-26 10:54:53
【问题描述】:
在我的应用程序中,我有 sqlite 文件,我想将该文件复制到另一个路径。我有以下代码。但是当我复制它时,我发现所有数据都没有复制到新文件中。如果我有新文件,那么下次在复制之前我必须删除文件(用新数据替换文件)并在同一路径复制新文件。如果我再次将数据复制到新路径并且如果所有数据都复制到新路径,那么我无法修改旧的 sqlite 文件。我不明白为什么在复制所有数据后我不能修改数据库。 &我如何才能成功复制所有数据?有什么方法可以实现这一目标。如果有人想要任何额外的信息,我会提供给你。
NSArray *paths =
NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory,
NSUserDomainMask, YES);
NSString *applicationSupportDirectory = [paths firstObject];
NSString *str=[NSString stringWithFormat:@"%@/XMPPMessageArchiving.sqlite",applicationSupportDirectory];//copy this file
NSString *fileName = [NSString stringWithFormat:@"XMPPMessageArchiving.sqlite"];
NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
NSFileCoordinator *coordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil];
NSURL *fromURL = [NSURL fileURLWithPath:str];
NSURL *toURL = [[ubiq URLByAppendingPathComponent:@"Documents"]
URLByAppendingPathComponent:fileName];
[coordinator coordinateReadingItemAtURL:fromURL options:NSFileCoordinatorReadingForUploading writingItemAtURL:toURL options:0 error:nil byAccessor:^(NSURL *newReadingURL, NSURL *newWritingURL)
{
NSFileManager* fileManager = [[NSFileManager alloc] init];
BOOL fileExists = [fileManager fileExistsAtPath:newWritingURL.path];
if (fileExists)
{
[fileManager removeItemAtURL:toURL error:nil];
}
NSError *error=nil;
[fileManager copyItemAtURL:newReadingURL toURL:newWritingURL error:&error];
}];
【问题讨论】:
-
我观察到,如果我使用 sqliteManager 打开 sqlite,则 .sqlite-wal 和 .sqlite-shm 会被删除,然后只有所有数据会复制到 newUrl。 & 一旦文件被删除,旧数据库就不会被修改
-
嗨!我必须向实体“XMPPMessageArchiving_Message_CoreDataObject”添加一个新属性,但为此我必须在 pod 中进行更改。是否可以在不更改属性的情况下添加新属性。
标签: ios database sqlite icloud xmppframework