Blog

CoreDataの最大値取得

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)
        }

一つ前の記事 StoryBoardのiPhone iPadプログラムによる切り分け
次の記事 営業くん2リリースです