ポジティブ丸メガネ

3年目エンジニアです。

Swift: CoreDataのレコード取り出し時に昇順、降順を指定する方法

何故か調べてもなかなか見つからなかったので、残しておきます。

例えば、以下のようなレコードが保存されているとします。
createdはその作成日時が「NSDate().timeIntervalSince1970」の形で代入されています。

class Book: NSManagedObject {
    @NSManaged var title:String
    @NSManaged var created:NSNumber
}

このcreatedをキーとして降順で全レコードを取り出したい場合は以下のようにします。

// AppDelegateクラスのインスタンスを取得
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
// AppDelegateクラスからNSManagedObjectContextを取得
// ゲッターはプロジェクト作成時に自動生成されている
let managedObjectContext = appDelegate.managedObjectContext
// EntityDescriptionのインスタンスを生成
let entityDiscription = NSEntityDescription.entityForName("Book", inManagedObjectContext:managedObjectContext);
// NSFetchRequest SQLのSelect文のようなイメージ
let fetchRequest = NSFetchRequest();
fetchRequest.entity = entityDiscription;
//取り出しの順番
let sortDescripter = NSSortDescriptor(key: "created", ascending: false)//ascendind:true 昇順、false 降順です
fetchRequest.sortDescriptors = [sortDescripter]
        
// フェッチリクエストの実行
do{
      let results = try managedObjectContext.executeFetchRequest(fetchRequest)
      for managedObject in results {
          let model = managedObject as! Book
          self.books.append(model)
      }
}catch{
      print(error)
}

ポイントは以下ですね。

let sortDescripter = NSSortDescriptor(key: "created", ascending: false)//ascendind:true 昇順、false 降順です
fetchRequest.sortDescriptors = [sortDescripter]

この部分で、キーと昇順降順を決定するようです。