Ios Swift&x2B;核心数据只保存循环中的最后一个。
我正在尝试最基本的核心数据实现,但由于某些原因,我似乎无法让它正常工作 我从服务器上的json文件获取数据,并按如下方式保存数据:Ios Swift&x2B;核心数据只保存循环中的最后一个。,ios,json,swift,core-data,Ios,Json,Swift,Core Data,我正在尝试最基本的核心数据实现,但由于某些原因,我似乎无法让它正常工作 我从服务器上的json文件获取数据,并按如下方式保存数据: let appDelegate = UIApplication.shared.delegate as! AppDelegate let context = appDelegate.persistentContainer.viewContext context.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
context.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
let users = NSEntityDescription.insertNewObject(forEntityName: "Users", into: context)
Alamofire.request(jsonLocation).responseJSON { (responseData) -> Void in
if((responseData.result.value) != nil) {
let swiftyJsonVar = JSON(responseData.result.value!)
for (_, value) in swiftyJsonVar {
let name = value["name"].stringValue
let age = value["age"].stringValue
//print("User: \(name)(\(age)).")
users.setValue(name, forKey: "name")
users.setValue(rank, forKey: "age")
do {
try context.save()
print("Saved..... ")
} catch {
print("save error")
}
}
} else {
print("response is nil")
}
}
当我尝试使用以下方式查看数据时:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
request.returnsObjectsAsFaults = false
do {
let results = try context.fetch(request)
if results.count > 0 {
for result in results as! [NSManagedObject] {
if let userName = result.value(forKey: "name") as? String {
print(userName)
}
}
} else {
print("no records found")
}
} catch {
print("did not get")
}
让appDelegate=UIApplication.shared.delegate为!AppDelegate
让上下文=appDelegate.persistentContainer.viewContext
let request=NSFetchRequest(entityName:“用户”)
request.returnsObjectsAsFaults=false
做{
let results=try context.fetch(请求)
如果results.count>0{
对于结果,结果为![NSManagedObject]{
如果让userName=result.value(forKey:“name”)作为?字符串{
打印(用户名)
}
}
}否则{
打印(“未找到记录”)
}
}抓住{
打印(“未获取”)
}
控制台打印
桑德
这是20人名单中的最后一个名字。有什么想法吗?您需要为每个用户调用
NSEntityDescription.insertNewObject
。你只打了一次电话
将代码更改为:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
context.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
Alamofire.request(jsonLocation).responseJSON { (responseData) -> Void in
if((responseData.result.value) != nil) {
let swiftyJsonVar = JSON(responseData.result.value!)
for (_, value) in swiftyJsonVar {
let name = value["name"].stringValue
let age = value["age"].stringValue
//print("User: \(name)(\(age)).")
let user = NSEntityDescription.insertNewObject(forEntityName: "Users", into: context)
user.setValue(name, forKey: "name")
user.setValue(rank, forKey: "age")
}
do {
try context.save()
print("Saved..... ")
} catch {
print("save error")
}
} else {
print("response is nil")
}
}
如果您愿意,也可以在for循环完成后保存一次。太棒了。谢谢我不敢相信事情竟那么简单。非常感谢。我不能接受9分钟,所以我会这样做:)