İçeriğe geç

Core Data ile NSPredicate kullanımı

Core Data

Merhabalar bu yazımda İOS uygulamalarınızda kullandığınız Core Data ile database üzerinden sorgulama işlemine göre veri çekeriz bunun örneğini vereceğim.

Bunun için başarılı bir sınıf olan NSPredicate sınıfını kullanacağız. Bu sınıf sayesinde SQL sorguları yapar gibi elinizdeki tabloya ilişkilere göre dilediğiniz veriyi filtreleyerek fetch edebilirsiniz. Bu sınıfa verdiğimiz predicateninde kendine özgü kuralları var tabiki buna uygun bir şekilde yazılırsa doğru çalışmakta.

Aşağıda bunlarla ilgili örnekleri inceleyebilirsiniz.

NSPredicate kullanırken, sorgu yazarken aritmetik operatörler yani (AND &&,OR || ,NOT !) kullanabilirsiniz.

Bunlara ek olarak String karşılaştırma ifadeleri bulunmakta CONTAINS, LIKE, MATCHES, BEGINSWITH, ENDSWITH .

Bu sınıfı iki farklı yöntemle kullanabilirsiniz. İlk yöntem parametre üzerinde kontrol işlemi diğeride direk string üzerinde kontrol işlemi.

NSPredicate(format: “%K == %@”, “age”,”21″)

Burdaki %K (key) anlamına gelir “age” yi temsil eder %@ ise karşılaştırılacak değişken “21” ‘i temsil eder. Integer olarak kontrol etmek isterseniz %D kullanmanız gerekir.

NSPredicate(format: “age == 21 && name == ‘kenan’ “)

Şeklindede kullanabilirsiniz. Tüm ifadeleri bu iki kullanım içinde kullanılmakta.

Kontrol işlemleri olarak ==,<=,>=,<> , LIKE ve BETWEEN kullanılmakta.

NSPredicate(format: “age BETWEEN {20,40}”) bize 20 ile 40 yaş arasını getirecektir.

NSPredicate(format: “name BEGINSWITH ‘d'”) d ile başlayan isimleri getirecektir.

NSPredicate(format: “name LIKE ‘al?'”) al ile başlayıp sonrasında sadece farklı 1 karakter olabilen

NSPredicate(format: “name LIKE ‘al*'”) sonrasında herhangi karakter olabilen

NSPredicate(format: “name CONTAINS[c] ‘li'”) içerisinde ‘li’ geçen herhangi bir isim

Kullanılan [c] veya [d] (birliktete kullanılabilinir).

  • c -> Büyük küçük harfe duyarsız olmasını sağlar.
  • d -> Özel harflere duyarsız olmasını sağlar.

Bunlara ek olarakta bir çok pradicateyi NSCompoundPredicate sınıfı ile çoklu şekilde kullanabilirsiniz.

Aşağıdaki verdiğim örnektete fetch işlemi ile birlikte kullanımını göstermiş oldum.

        let delegate = UIApplication.shared.delegate as! AppDelegate
        
        let context =  delegate.persistentContainer.viewContext
        
        let fetch = NSFetchRequest<NSFetchRequestResult>(entityName: "User")
        fetch.returnsObjectsAsFaults = false

        let predicate = NSPredicate(format: "name CONTAINS[c] 'li'")
        fetch.predicate = predicate
        
        do {
            
            let results = try context.fetch(fetch)
            
            if results.count > 0 {
                for result in results as! [NSManagedObject] {
 
                    print(result.value(forKey: "name") as? String)
                }
            }
            
        } catch {
            print("error")
        }

Aşağıdaki NSPredicate ile ilgili güzel bir dökümentasyon örneğinide inceleyebilirsiniz.

NSPredicate Cheetsheet

Kategori:Core Data

Bu yazı yorumlara kapalı.

Copyright © 2022 Kenan Atmaca