如何在Core Data(Swift)中存储数组

6

我的代码读取一个文本文件,并将文件内容存储在数组中。我在下一步中遇到了问题:将数组的内容传输到Core Data中。这个.txt文件只是一个水果列表。实体是“Fruit”,属性是“fruitname”。

当我打印时,只有最后一个数组元素显示出来。以下是我的代码:

    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.
}

}

这是两个println语句的输出....
// fruitArray的Println 苹果 杏子 香蕉 越橘 黑莓 蓝莓 椰子 小红莓 枣 火龙果 无花果 葡萄 番石榴 蜜露 奇异果 柠檬 酸橙 荔枝 芒果 甜瓜 橙子 木瓜 菠萝 覆盆子 杨桃 草莓 西瓜
// core data的Println 可选(........ 水果名称 = 西瓜; })]
请问有人能帮忙确保fruitArray中的所有内容都被保存到核心数据中吗?先谢谢了。
1个回答

6

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

请将代码更改为:

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

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

1
因此,.insert-NEW-OBJECT-FOR-ENTITY-ForName。我应该注意到这一点。谢谢你解决我的问题,GoZoner。但愿我有更多的声望。 - BadLuckJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接