【问题标题】:How do you store an array in core data (Swift)如何将数组存储在核心数据中(Swift)
【发布时间】:2015-04-25 14:59:23
【问题描述】:

我的代码读取一个文本文件并将文件的内容存储在一个数组中。下一步我遇到了麻烦;将数组的内容传输到 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 苹果 杏 香蕉 覆盆子 黑莓 蓝莓 椰子 酸果蔓 日期 火龙果 无花果 葡萄 番石榴 甘露 猕猴桃 柠檬 酸橙 荔枝 芒果 瓜 橘子 番木瓜 菠萝 覆盆子 杨桃 草莓 西瓜

//核心数据的打印输出

可选(........ 水果名=西瓜; })]

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

【问题讨论】:

    标签: ios swift core-data


    【解决方案1】:

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

    将您的代码更改为:

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

    【讨论】:

    • 因此 .insert-NEW-OBJECT-FOR-ENTITY-ForName。我应该抓住它。感谢您解决我的问题,GoZoner。希望我有更多的代表。
    猜你喜欢
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多