2016-08-16 6 views
0

С помощью этой функции я хочу добавить атрибуты в объект , но он сохраняет только последний элемент повторно.только сохранение последнего элемента при сохранении в основных данных swift

что я делаю неправильно?

func SetFeaturedValues(Array : NSArray){ 
     let appDelegate = 
      UIApplication.sharedApplication().delegate as! AppDelegate 

    let managedContext = appDelegate.managedObjectContext 
    let entity = NSEntityDescription.entityForName("FeaturedJob", 
                inManagedObjectContext:managedContext) 
    let FeaturedJob = NSManagedObject(entity: entity!, 
             insertIntoManagedObjectContext: managedContext) 

    print("array is \(Array)") 
    for i in Array{ 
     if let rowData :NSDictionary = i as? NSDictionary{ 
      FeaturedJob.setValue(rowData["company"], forKey: "company") 
      FeaturedJob.setValue(rowData["city"], forKey: "city") 
      FeaturedJob.setValue(rowData["id"], forKey: "id") 
      FeaturedJob.setValue(rowData["user_logo"], forKey: "user_logo") 
      FeaturedJob.setValue(rowData["title"], forKey: "title") 



     do { 
      try managedContext.save() 
      self.Featured.append(FeaturedJob) 
      print("featured job is \(FeaturedJob)") 
      //    people.append(person) 

     } catch let error as NSError { 
      print("Could not save \(error), \(error.userInfo)") 
     } 
     } 
    } 

} 
+0

Вы можете поделиться своим «core_data.model» – Dravidian

ответ

0

Хорошо, так что это еще может сделать с некоторыми прибирать, но ...

Что происходит не так, что вы создаете только один единственный экземпляр NSManagedObject под названием FeaturedJob. Каждый раз, когда вы перебираете массив, вы добавляете его значение и сохраняете его. Но это тот же самый экземпляр! Вот почему спасен только один экземпляр.

Итак, поставьте строку с let FeaturedJob = ... внутри блока if, прежде чем вы начнете присваивать значения. Таким образом, каждый раз вы будете получать новый.

PS: Вы сохраняете контекст с каждой итерацией. Вероятно, вы хотите сделать это только один раз в конце функции.

+0

спасибо :), и я не получил ур последнее предложение. –

+1

Итак, последнее, что вызов managedContext.save находится внутри цикла, который выполняет итерацию и добавляет сущности в контекст. Каждый объект получает индивидуальную сохранность. Экономия дорого, поэтому просто делайте это один раз в конце. Не беспокойтесь, контекст будет удерживать новые сущности тем временем, чтобы вы могли сохранить их все сразу. – ncke

+0

сейчас работает нормально. но столкнулся с другой проблемой, когда я перезапустил приложение, я не нашел данных в основных данных. –

Смежные вопросы