如何在核心数据中存储数组(Swift)

Bad*_*ckJ 5 core-data ios swift

我的代码读取一个文本文件,并将文件的内容存储在一个数组中。我在下一步遇到麻烦;将数组的内容传输到Core Data中。.txt文件只是水果的简短列表。实体为“水果”,属性为“水果名称”。

打印时仅显示最后一个数组元素。这是我的代码:-

    import UIKit
    import CoreData

    class ViewController: UIViewController {

    override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.


    // STORE .TXT FILE IN ARRAY.....
    let bundle = NSBundle.mainBundle()
    let fruitList = bundle.pathForResource("List of Fruits", ofType: "txt")

    let fruitArray = String(contentsOfFile: fruitList!, encoding: NSUTF8StringEncoding, error: nil)!.componentsSeparatedByString("\r")


    for x in fruitArray {
        println(x)

    }

    // STORE FRUIT-ARRAY IN CORE DATA......
    var appDel = UIApplication.sharedApplication().delegate as AppDelegate

    var context : NSManagedObjectContext! = appDel.managedObjectContext!

    var newFruit = NSEntityDescription.insertNewObjectForEntityForName("Fruit", inManagedObjectContext: context) as NSManagedObject

    for fruit in fruitArray {

        newFruit.setValue(fruit, forKey: "fruitname")
    }

    context.save(nil)


    // RETRIEVE AND PRINT STORED VALUES....
    var request = NSFetchRequest(entityName: "Fruit")
    request.returnsObjectsAsFaults = false

    var results = context.executeFetchRequest(request, error: nil)

    println(results)

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}
Run Code Online (Sandbox Code Playgroud)

这是两个println语句的输出。

//水果的Println苹果杏香蕉越桔黑莓蓝莓椰子蔓越莓日期龙果无花果葡萄番石榴甘露猕猴桃柠檬酸橙荔枝芒果蜜瓜橙木瓜菠萝覆盆子杨桃草莓西瓜

//打印核心数据

可选(........ fruitname =西瓜;})]

有人可以帮忙确保FruitArray中的所有内容都保存在核心数据中吗?提前致谢。

GoZ*_*ner 5

您只创建了一个newFruit。因此,您的for fruit in fruitArray循环只是重复地重新分配该fruitname属性。

将您的代码更改为:

for fruit in fruitArray {
  var newFruit = NSEntityDescription.insertNewObjectForEntityForName ("Fruit", 
     inManagedObjectContext: context) as NSManagedObject

  newFruit.setValue(fruit, forKey: "fruitname")
}
Run Code Online (Sandbox Code Playgroud)