我正在将csv文件解析为核心数据。我正在解析文件并在一个函数中同时将数据保存到CD中。如果这是一个好方法,我有兴趣得到一些反馈意见吗?它确实有效,数据被保存。为了使事情变得简单,所有实体属性都是字符串。我是swift的新手,所以我希望确保我没有犯任何新手错误。这是功能。 我有一个问题。我现在不确定是否将文件中的数据保存到与Asteroids实体有关系的同一数据模型中的不同实体中的属性。例如,Resources实体中的资源和数量属性。
func parseAsteroidCSVForCD(){
let context = getContext()
let entity = NSEntityDescription.entity(forEntityName: "Asteroid", in: context)
let manageObj = NSManagedObject(entity: entity!, insertInto: context)
// Path variable to the asteroids.csv file
let path = Bundle.main.path(forResource: "asteroids", ofType: "csv")!
// Parse the file in a do catch
do {
// Use the paser to pull out the rows
let csv = try CSV(contentsOfURL: path)
let rows = csv.rows
// Go through each row to store the id, name, size, distance and value
for row in rows {
let id = row["id"]!
let name = row["name"]!
let size = row["size"]!
let distance = row["distancefromEarth"]!
let value = row["value"]!
// load into Core Data here
manageObj.setValue(id, forKey: "id")
manageObj.setValue(name, forKey: "name")
manageObj.setValue(size, forKey: "size")
manageObj.setValue(value, forKey: "value")
manageObj.setValue(distance, forKey: "distance")
do {
try context.save()
print("New Asteroid has been created")
} catch {
print(error.localizedDescription)
}
}
} catch let err as NSError {
print(err.debugDescription)
}
}
答案 0 :(得分:0)
使用此逻辑,不会插入所有CSV行。因为你只创建了一个" manageObj"并继续设置每一行的值。所以最后你将只有一个" manageObj"最后一行的值。
实体创建应该在for循环中,这样对于每一行,都会创建一个新实体。并且不要在for循环中保存。一旦for循环完成,保存它..单个保存..