将对象保存到核心数据中

时间:2015-09-03 16:31:49

标签: ios xcode swift core-data

有些东西让我很困惑......我正在学习一个教程,但他没有介绍大部分代码是如何完成的。

使用NSManagedObject子类的教程,如果用户首次启动应用,我第一次检查样本数据是否在Core Data我们跳过使用return样本数据进入核心数据。 我们来看看。

 func inserSampleData()
  {
    let fetchRequest = NSFetchRequest(entityName: "Bowtie")
    fetchRequest.predicate = NSPredicate(format: "searchKey != nil")

    let count = managedContext.countForFetchRequest(fetchRequest, error: nil)

    if count > 0 { return } //break if we have the sample data already in the core data

    let path = NSBundle.mainBundle().pathForResource("SampleData", ofType: "plist")

    let dataArray = NSArray(contentsOfFile: path!)

    for dict in dataArray!
    { //1
        let entity = NSEntityDescription.entityForName("Bowtie", inManagedObjectContext: self.managedContext)
        let bowtie = Bowtie(entity: entity!, insertIntoManagedObjectContext: self.managedContext)
        let btDict = dict as! NSDictionary

       //// SOME CODE

        var error: NSError?

        if !managedContext.save(&error)
        {
            println("Some error \(error?.userInfo)")
        }

    }
  }

在评论1中,他使用NSEntityDescription来获取实体的对象, 我相信我们这样做,将我们的样本数据保存到Core数据中,除非我们调用NSEntityDescription,否则无法完成...

让我们来看看第二个func wear()

  func wear() {
    //currentBowtie is an instance of the NSManagedObject Subclass
    let times = currentBowtie.timesWorn.integerValue
    currentBowtie.timesWorn = NSNumber(integer: times + 1)
    currentBowtie.lastWorn = NSDate()

    var error: NSError?

    if managedContext.save(&error)
    {
        println("unable to save \(error) \(error?.userInfo)")
    }

  }

根据他直接保存到磁盘的第二个功能,没有指定实体,他也没有调用NSEntityDescription.entityForName...

那么应用程序如何知道要保存哪个实体?

他为什么在NSEntityDescription中拨打Func insertSampleData(),&他没有在func wear()中使用它?

1 个答案:

答案 0 :(得分:1)

在核心数据中创建新的Bowtie时,您需要实体描述。

currentBowtie已经创建,因此可以进一步使用它,保存它不需要实体描述。