将核心数据与服务器同步 - 多次添加相同的对象

时间:2016-03-30 12:57:16

标签: swift core-data

我有一个用户可以选择的类别列表。由于我计划在不必发送新更新的情况下添加新类别,因此我希望每次用户启动应用时都从我的服务器加载新类别。我提出了这个代码,但每次运行它都会不断添加相同的类别。

 func loadDealCategory(){

    let myUrl = NSURL(string: "\(ipAddress)/v1.0/dealCategory.php")
    let request = NSMutableURLRequest(URL: myUrl!)
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request)
    { data, response, error in

        if error != nil {

            print("error\(error)")

        }else{


            do{

                let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSArray


                let appDelegate =
                    UIApplication.sharedApplication().delegate as! AppDelegate
                let managedContext = appDelegate.managedObjectContext

                for jsonDictionary in json {

                    // listing of columns in JSON seed file
                    let categoryDescription = jsonDictionary.valueForKey("category_description") as! String

                    print(categoryDescription)

                    let newCategory = NSEntityDescription.insertNewObjectForEntityForName("Categories", inManagedObjectContext: managedContext)
                    newCategory.setValue(categoryDescription, forKey: "category_description")

                 // I tried also format: "category_description = %@"


                    let fetchRequest = NSFetchRequest(entityName: "Categories")
                    fetchRequest.predicate = NSPredicate(format: "category_description LIKE %@", categoryDescription)

                    do {
                        let fetchResults = try managedContext.executeFetchRequest(fetchRequest)

                        print(fetchResults)

                        if fetchResults.count == 0{

                            do {
                                try managedContext.save()
                                //5
                            } catch let error as NSError  {
                                print("Could not save \(error), \(error.userInfo)")
                            }


                        }else{

                            print("\(categoryDescription) already exist!")



                        }


                    } catch let error as NSError {
                        // failure
                        print("Fetch failed: \(error.localizedDescription)")
                    }


                }


            } catch{

                print("something went wrong loading json")


            }

        }
    }
    task.resume()
}
  1. 没问题,加载到func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

1 个答案:

答案 0 :(得分:0)

发现问题,我在检查对象是否已经在实体中之前插入了对象。

  if fetchResults.count == 0{

      let newCategory = NSEntityDescription.insertNewObjectForEntityForName("Categories", inManagedObjectContext: managedContext)
      newCategory.setValue(categoryDescription, forKey: "category_description")


  }else{

  print("Could not save \(error), \(error.userInfo)")

 }

然后才保存

 do {
         try managedContext.save()

    } catch let error as NSError  {

        print("Could not save \(error), \(error.userInfo)")
  }