Core Data: Veri Düzenleme

Core Data ile depoladığınız verileri düzenlemeyi ve silmeyi öğrenin.

Ege Sucu
TurkishKit
3 min readSep 13, 2019

--

Merhaba TurkishKit okuyucuları. Bir önceki yazımızda sizlerle Core Data üzerinde veri yazıp okuyabilmeyi öğrenmiştik. Bir Veri tabanı akla gelindiğinde ünlü kelime kullanılır, CRUD(Create, Read, Update, Delete). Fark ettiğiniz üzere Update ve Delete işlemlerini yapmadık. Bu eksiklerimizi varolan projemiz üzerinde uygulayalım.

Listemize Swipe Özelliği Ekleme

Önceki yazımıda başladığımız projeye ulaşmak için:

Öncelikle listemiz an itibari ile kaydırılabilir değil. Biz bu listeye sol ve sağ kaydırılabilir aksiyonlar ekleyeceğiz. Bu sayede iki operasyonu basit bir yere taşıyabileceğiz.

Bunun için 3 fonksiyon ekleyeceğiz.

İlk fonksiyonumuz canEditRowAt ve bize listemizin kaydırılıp kaydırılamayacağını belirliyor.

İkinci fonksiyonumuz trailingSwipeActionsConfigurationForRowAt ve bize sola kaydırdığımızda sağ kısımda çıkacak aksiyonu soruyor. Buna Delete adını vereceğimiz bir UIContextualAction aksiyonu vereceğiz ve içinde silme fonksiyonumuzu çağıracağız.

Burada önemli olan şey adımlarınız. Bir veri silerken bu sırayı takip etmez iseniz hata almanız muhtemeldir.

  1. Veritabanından itemi silin
  2. Array’ den objeyi çıkarın
  3. listeden o hücreyi çıkarın
  4. listeyi yenileyin.

Üçüncü ve son fonksiyonumuz ise leadingSwipeActionsConfigurationForRowAt adında ve bu bize sağa kaydırdığımızda solda duracak aksiyonu verecek. Buraya da Update işlemini koyacağız.

Burada da gördüğünüz üzere önce update edip daha sonra listeyi yenileme yapıyoruz. Bu sayede listemiz de güncel kalıyor.

Silme Aksiyonunu Uygulayalım

Şimdi geldik removeItem fonksiyonuna. Gördüğünüz üzere fonksiyonumuz silinecek objeyi alıyor.

Bu objeyi aldıktan sonra CoreData’nın vazgeçilmezi olan yönetilebilir içeriğe(managedContext) erişiyoruz. Sonrasında bir istek(request) yazıyoruz ve objeyi veritabanında bulmak için bir tahmin üretiyoruz. Bu tahmin bize eşleşen objeleri veriyor. Bir obje aradığımız için filtreyi basit tutuyoruz ve isim ile eşleşeni arıyoruz. “item = %@”, listItem dediğimizde bu obje isminin eşleşeceği bir filtre yapmış oluyoruz. (Aynı isimli iki tane itemin olmadığını varsayıyoruz. Böyle bir durumda da result[0] ile ilk sonucu bulabilirsiniz.)

Daha sonrasında sonuçtan objemizi seçip silme emri vereceğiz.

Veriyi Güncelleme Aksiyonunu Uygulayalım

Silme ile aynı adımları uygulayıp ilk önce filtreleri yapıyoruz. Daha sonra Ürün Ekleme’de kullandığımız UIAlertController’ı kopyalayıp modifiye ediyoruz. Bu sefer yazacağımız metin eski metini güncelleyecek ve metnimiz değişmiş olacak. Sonra veritabanından güncel verileri çekerek işlemi tamamlamış olacağız.

updateItem Fonksiyonumuz

Ve uygulamamız tamam. Gelin ne yaptığımızı görelim.

Uygulamamız Update ve Delete İşlemlerini Yapabiliyor

Bir yazımızın daha sonuna geldik. Bir önceki repomuzun aynısında değişiklikleri görebilirsiniz. Değişikliği görmek için branch:master yazan yere tıklayıp “cd2” branşını seçerseniz görebilirsiniz. Hepinize keyifli kodlamalar.

--

--