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]
この部分で、キーと昇順降順を決定するようです。