Ios Swift&x2B;核心数据只保存循环中的最后一个。

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

我正在尝试最基本的核心数据实现,但由于某些原因,我似乎无法让它正常工作

我从服务器上的json文件获取数据,并按如下方式保存数据:

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分钟,所以我会这样做:)