无法删除SQLite数据库文件

时间:2016-06-21 01:45:00

标签: ios swift2

我是Xcode和ios的新手。我正在使用Xcode 7.3版本和swift2.2

我已从我的项目中删除了一个已填充的SQlite Db。后来,我在Xcode中使用Add file菜单添加了同名的SQLite Db,只修改了该字段的内容。例如,fieldname:addr,内容:123,5th ave,现在同一个域名:addr,内容:12,Broadway

添加修改后的内容SQLite DB后,代码STILL使用的是123,5th ave的旧内容!

let querySQL = "select Sid, location, Addr from tblPlaces where Sid ="  + myId

 let result: FMResultSet? = MyDB.executeQuery(querySQL, withArgumentsinArray:nil)

 if result?.next() == true {

   let strAddr = results!stringForColumn("Addr")

 }else {

 }

I have created a class to handle the creation of SQLite DB in AppDelegate:

  Util.copyFile("SqliteDB filename")


here the code:
class func copyFile(fileName: NSString) {

        var dbPath: NSString = getPath(fileName)

        var fileManager = NSFileManager.defaultManager()

        if !fileManager.fileExistsAtPath(dbPath) {

           let documentsURL = NSBundle.mainBundle().resourceURL
           let fromPath = documentsURL!.URLByAppendingPathComponent(filename as string)

           var error : NSError?

          do {
              try filemanager.CopyItemAtPath(fromPath.path!, toPath: dbPath)

           }catch let error1 as NSError {

          error = error1
        }

    }



// GetPath of the SQLite file

class func getPath(filename : String) -> string {

  let documentDirectory = try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory,inDomain:
    UserDomainMask, appropriateURLURL:nil, create: true)

 return documentDirectory.URLbyAppendingPathComponent(filename).path! 

}

发生了什么事?怎么做正确的方法?

如果我删除SQlite Db文件说MyDB.sqlite,后来我添加了同名Db文件并修改了内容,我应该获取新内容。但事实并非如此。

1 个答案:

答案 0 :(得分:0)

您将文件放在应用程序包中,即随应用程序一起分发。该文件是只读的。要更新文件(包括方案重组),您需要将文件复制到文档文件夹,然后在那里进行更新。否则,您的更新将失败,为您留下与以前相同的文件。

我认为这就是正在发生的事情。

对于分发,还必须标记任何此类文件,不要备份到icloud或拒绝该应用程序。

我使用以下方法(抱歉,obj c)将文件从包中复制到文档目录(抱歉,这段代码很邋but,但它可能传达了基本的想法)。

+ (void)copyBundleFileToStoresDirectory:(NSString *)filename


{
    NSError *error;
    NSURL *fileURL = [NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:filename ofType:nil]];
    NSURL *pathURL = [SVOFileSystemMethods documentsSubdirectory:@"Stores" skipBackup:YES];

    if (fileURL)
    {
        if([[NSFileManager defaultManager] copyItemAtURL:fileURL toURL:pathURL error:&error])
        {
        //           NSLog(@"File successfully copied");
        }
        else
        {
            [[[UIAlertView alloc]initWithTitle:NSLocalizedString(@"error", nil) message: NSLocalizedString(@"Failed to copy database from bundle.", nil)
                                  delegate:nil cancelButtonTitle:NSLocalizedString(@"OK", nil)  otherButtonTitles:nil] show];
            NSLog(@"Error description-%@ \n", [error localizedDescription]);
            NSLog(@"Error reason-%@", [error localizedFailureReason]);
        }
}

}

// //  flags URL to exclude from backup //
+ (BOOL) addSkipBackupAttributeToItemAtURL:(NSURL *)URL {
    NSError *error = nil;
    BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES]
                                  forKey: NSURLIsExcludedFromBackupKey error: &error];
    if(!success)
    {
        NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error);
    }

    return success; }