Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 添加前检查值是否在sqlite数据库中_Ios_Swift_Sqlite_Core Data - Fatal编程技术网

Ios 添加前检查值是否在sqlite数据库中

Ios 添加前检查值是否在sqlite数据库中,ios,swift,sqlite,core-data,Ios,Swift,Sqlite,Core Data,我试图将一些值从.csv文件预加载到数据库中,但如果它们已经存在,则跳过它们。我能够成功解析csv文件,然后使用以下功能检查数据库中是否存在csv文件: func GetPreloadedDriverExists(manufacturer: String, model: String, size: Float, impedance: Int) -> Bool { //1 let appDelegate = UIApplication.sharedApplication().

我试图将一些值从.csv文件预加载到数据库中,但如果它们已经存在,则跳过它们。我能够成功解析csv文件,然后使用以下功能检查数据库中是否存在csv文件:

func GetPreloadedDriverExists(manufacturer: String, model: String, size: Float, impedance: Int) -> Bool
{
    //1
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let managedContext = appDelegate.managedObjectContext!

    //2
    let fetchRequest = NSFetchRequest(entityName:"Drivers")
    fetchRequest.propertiesToFetch = ["size"]
    fetchRequest.returnsObjectsAsFaults = false
    fetchRequest.predicate = NSPredicate(format: "(manufacturer MATCHES %@) AND (model MATCHES %@) AND (#size == %@) AND (impedance == %@) AND (isRemovable == FALSE)", "\(manufacturer)", "\(model)", "\(size)", "\(impedance)")

    //3
    var error: NSError?

    let fetchedResults:NSArray = (managedContext.executeFetchRequest(fetchRequest, error: &error))!

    return fetchedResults.count == 0 ? false : true
}
第一次通过此返回false时,正如我对所有条目所期望的那样,但是当我在设备上打开sqlite文件时,它是空的

下面是我用来将条目添加到数据库中的循环

if let managedObjectContext = self.managedObjectContext {
     for item in items {
     // Check if driver already exists in database, if not add it.
          if(!GetPreloadedDriverExists(item.manufacturer, model: item.model, size: (item.size as NSString).floatValue, impedance: (item.impedance as NSString).integerValue))
          {
               println("Value does not exist")
               let menuItem = NSEntityDescription.insertNewObjectForEntityForName("Drivers", inManagedObjectContext: managedObjectContext) as! Drivers
                        menuItem.manufacturer = item.manufacturer
                        menuItem.model = item.model
                        menuItem.size = (item.size as NSString).floatValue
                        menuItem.impedance = (item.impedance as NSString).integerValue

                if managedObjectContext.save(&error) != true {
                     println("insert error: \(error!.localizedDescription)")
                }
           }
      }
 }
更新#1 信息似乎保存在某个地方,但当我从设备保存容器并查看包内容时,sqlite文件中没有我的信息,但当我在调试器中运行它时,它表示所有信息都在那里


感谢您的帮助和任何反馈。

我找到了我的答案。它不会直接将其填充到sqlite文件,默认情况下,它使用预写日志记录。一旦我用数据库浏览器打开它,所有数据都被合并并显示在sqlite文件中

然后我发现了如何禁用写前日志记录,这解决了我的问题并自动填充了.sqlite文件