coredataの最大値取得 CoreDataは複雑なので、忘備録
rubyなら2行で取ってこれると思う。
func datMeetingMaxId() -> Int { //***** contextはDBファイルそのもの 入れ物を用意 永続化ストア let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext /// ここからが最大値の取得方法 let expressionDatMeetiongId = "Maxid" /// fetchRequestの生成 let fetchRequest = NSFetchRequest<NSFetchRequestResult>() /// EntityDescriptionの生成 //forEntityNameをentityしておくと、いろんなentityが使える //in : context contextの中にあるという意味 上記永続化ストア let entityDescription = NSEntityDescription.entity( forEntityName :"DatMeeting" , in : context) fetchRequest.entity = entityDescription //******* let keyPathExpression = NSExpression(forKeyPath: "id") let expression = NSExpression(forFunction: "max:", arguments: [keyPathExpression]) let expressionDescription = NSExpressionDescription() expressionDescription.name = expressionDatMeetiongId expressionDescription.expression = expression expressionDescription.expressionResultType = NSAttributeType.integer64AttributeType fetchRequest.resultType = NSFetchRequestResultType.dictionaryResultType fetchRequest.propertiesToFetch = [expressionDescription] //******エラーハンドリングは実装しないと動かない do{ let results = try context.fetch(fetchRequest) if let maxId = ((results.first as AnyObject).value(forKey: expressionDatMeetiongId)) as? Int { print("maxId = \(maxId)") return maxId + 1 } else{ return 1 } } catch let error { print(error) }