gpt4 book ai didi

ios - 将 json 字典保存到核心数据 Swift 3

转载 作者:行者123 更新时间:2023-11-28 12:25:19 31 4
gpt4 key购买 nike

我能够使用可转换键值将 json 数组中的最后一个 guest 字典值作为字典保存到核心数据中,但是其他 guest 字典值未保存。 Guest 现在也在实体上,但我希望将 guest 保存为字典,因为此任务不需要复杂的关系。我确定我正在查看 json,reservation.guest 的值类型 = [AnyHashable: Any]?任何建议都会对我的 json 响应有帮助 https://pastebin.com/J28myW66 , 谢谢

注意:HTTP 请求使用 Alamofire。也没有包括我的整个类(class),因为这是它的主要部分。 Reservation 和 Guest 都是 NSManagedObject 类

    let managedObjectContext = CoreDataManager.shared.persistentContainer.viewContext

let reservationEntityDescription = NSEntityDescription.entity(forEntityName: "Reservation", in: managedObjectContext)
let guestEntityDescription = NSEntityDescription.entity(forEntityName: "Guest", in: managedObjectContext)

let reservation = Reservation(entity: reservationEntityDescription!, insertInto: managedObjectContext)
let guest = Guest(entity: guestEntityDescription!, insertInto: managedObjectContext)


let url = "\(serverEndpoint)\(path)"

manager?.request(
url
).responseJSON { responseData in

if(responseData.result.error != nil) {

print(responseData.response)
}
else if responseData.result.value != nil{


let json = JSON(responseData.result.value!)

let content = json["data"]

var reservationArray: [String] = []
if let dates = content.array {
for item in dates {
if let str = item["date_time"].string {
reservationArray.append(str)
print(reservationArray)
}
}

}

for (key,obj) in content {

let guestData = obj["guest"]
let guestDict = guestData.dictionaryObject!

reservation.guest = guestDict
reservation.id = obj["id"].stringValue
reservation.dateTime = obj["date_time"].date
reservation.startTime = obj["start_time"].time
reservation.numOfPeople = obj["number_of_people"].intValue as NSNumber?
reservation.status = obj["status"].stringValue
reservation.tables = obj["tables"].arrayObject as! [NSString]?
reservation.reservationCollections = reservationArray as [NSString]?

guest.id = guestData["id"].stringValue
guest.email = guestData["email"].stringValue
guest.name = guestData["full_name"].stringValue
guest.phone = guestData["phone"].stringValue
guest.notes = guestData["notes"].stringValue

}
print("Reservation to be saved\(reservation)")
print("Guest to be saved: \(guest)")
}
}

do {
try reservation.managedObjectContext?.save()

} catch let error as NSError {

fatalError(error.localizedDescription)

}

do {
try guest.managedObjectContext?.save()

} catch let error as NSError {

fatalError(error.localizedDescription)

}

最佳答案

当您的代码开始时,您创建Guest一个 实例和Reservation一个 实例:

let reservation = Reservation(entity: reservationEntityDescription!, insertInto: managedObjectContext)
let guest = Guest(entity: guestEntityDescription!, insertInto: managedObjectContext)

在那之后,您再也不会创建任何其他实例。在你的循环中,你为这个实例赋值:

reservation.guest = guestDict
reservation.id = obj["id"].stringValue
...

guest.id = guestData["id"].stringValue
guest.email = guestData["email"].stringValue
...

但是因为只有一个实例,所以只有最后一次循环被保存。第一次通过循环时,您将值分配给 guestreservation。每隔一段时间,您都会用新值覆盖以前的值。

如果你想为每一次循环都保存一个新的实例,你需要每次都创建新的实例。在循环内移动 let guest = ...let reservation = ... 行。

关于ios - 将 json 字典保存到核心数据 Swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43577417/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com