変換可能なキー値を使用してコアデータに保存されたjson配列の最後のゲスト辞書値を取得できますが、他のゲスト辞書値は保存されません。ゲストは今でもエンティティですが、このタスクは複雑な関係を必要としないため、ゲストを辞書として保存したいと考えていました。私はjsonを見ていると思いますが、reservation.guest = [AnyHashable: Any]?
の値のタイプは、私のjsonの応答https://pastebin.com/J28myW66です。ありがとうjson辞書をコアデータに保存するSwift 3
注:HTTPリクエストにはAlamofireを使用しています。これが私のクラスの主要部分であるので、私のクラス全体をここに含めていない。予約やユーザーレビューの両方NSManagedObjectクラスは、デザイン・フロー・ビットの汎用すなわちHTTPリクエスト/レスポンス、データベース部、機種部品およびUI部品を作成する必要があります。まず
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)
}
ありがとうと素敵な説明。私はそれを逃したと信じられない! –