CoreData Nedir ve Nasıl Kullanılır?

Core Data Nedir ve Nasıl Kullanılır?

Veri tabanları bir sistemin olmazsa olmaz yapı taşıdır. Kimi zaman uzaklardaki bir sunucu olurken, kimi zaman kullanılan cihazın hafızası olur. İşte tam da bu noktada karşımıza Core Data çıkıyor. Apple tarafından sunulan bu özelliğin Swift ile nasıl kullanıldığını hiç merak ettiniz mi? Gelin biraz yakından bakalım.


Nedir ?


Apple tarafından macOS ve iOS için sunulmuş bir veri tabanıdır. Burada veriler cihazın hafızasına kaydedilirken uygulamanın kapanıp açılması veriler için herhangi bir tehdit oluşturmaz. Ne zaman ki kullanıcı uygulamayı silerse, işte o zaman verilerde silinir.



Nasıl Uygulamaya Eklenir ?


Core Data ile çalışmak istediğinizi Xcode’a söylemek oldukça kolay. Yeni bir proje oluştururken açılan ekranda Core Data adında bir seçenek görüyoruz. Bu kutuyu işaretlersek uygulamamızda Core Data özelliklerini kullanacağımızı Xcode’a belirtmiş oluyoruz.



Nasıl Dizayn Edilir ?


Proje dosyalarımıza baktığımızda Core Data seçeneğini görüyoruz. İçeri girdiğimizde bizi farklı bir yapı karşılıyor. Burada öncelikle bir ‘Entity’ oluşturmamız gerekiyor. Üzerine çift tıklayarak ismini değiştirebildiğimiz Entity’nin ise içerisine kaydetmek istediğimiz verileri ve bu verilerin tiplerini listeleyeceğiz. Burada kaydetmez istediğimiz verilere ‘Attribute’ deniyor. Oluşturulan Attriibute’ların tipini ise Type kısmından veriyoruz. Bu sayede Core Data neyi nasıl saklayacağını daha kararlı bir şekilde biliyor.  



Nasıl Veri Saklanır ?

Şimdi geldik en önemli kısma. Bu işlem için öncelikle AppDelegate’a ulaşmalıyız. Bunun için;

let appDelegate = UIApplication.shared.delegate as! AppDelegate

Şimdi ise appDelegate değişkenini kullanarak AppDelegate içindeki context yapısına ulaşmalıyız. Bunun için;

let context = appDelegate.persistentContainer.viewContext

Oluşturduğumuz bu context’i kullanarak oluşturduğumuz Entity içerisine veri kaydedeceğimizi bildirmeliyiz. Fakat dikkat etmeliyiz ki bu metodu kullanmak için Core Data kütüphanesini sayfalarımıza eklemeliyiz.

let newTest = NSEntityDescription.insertNewObject(forEntityName: "Test", into: context)

Şimdi geldik verileri Core Data ile eşleştirmeye. Bu noktada setValue metodundan faydalanacağız. Örneğin;

newTest.setValue(TextField.text!, forKey: "test")

Burada ilk değer kaydetmek istediğimiz, forKey ise Core Data oluştururken verdiğimiz Attribute ismi oluyor. Fakat burada iki kez kontrol etmekte fayda var. Eğer herhangi bir yazım hatası yaparsanız uygulamanız çöker.


Artık son bir işlemimiz kaldı. O da eşitlediğimiz verileri Core Data’ya tamamen kaydetmek. Bu işlem de diğer işlemler gibi oldukça kolay. Bunun için save metodunu kullanacağız. Fakat burada değinmemiz önemli bir nokta var. Veri tabanları ile çalışırken sürekli sorun çıkar. Bağlanamayabiliriz veya sistemde bir hata çıkabilir. Bu yüzden do-try-catch bloğu ile kullanacağız. Bu sayede dönen hataları başarılı bir şekilde ele alabilir ve kullanıcıyı bilgilendirebiliriz. Bunun için;

do {
	try context.save
}catch{
	print(“Error”)
}

İşte Core Data’ya veri kaydetmek bu kadar kolay. Şimdi bu verilerin nasıl çekilip kullanıcıya gösterileceğine bakalım.


Nasıl Veri Çekilir ?

Kaydedilen bilgilerin en sonunda mutlaka kullanıcıya gösterilmesi gerekiyor. Core Data ile aslında bu işlem de oldukça basit. İlk olarak yine AppDelegate’a ve orada bulunan context’e ulaşmamız gerekiyor.

let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext

Bu iki işlemi verileri Core Data’ya kaydederken de yapmıştık. Fakat buradan sonrası biraz değişmeye başlıyor. Öncelikle bir fetchRequest oluşturmalıyız. Bu Core Data’dan verileri çekmek istediğimizi iletecek.

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Test")

İsteğimizi oluşturduk. Burada parantezler içindeki NSFetchRequestResult değeri dönen verinin sonuç tipini belirtir. Bu aşamadan sonra bir özelliği değiştirmek gerekiyor.

fetchRequest.returnsObjectsAsFaults = false

Şimdi aslında sona biraz yaklaştık. Sadece birkaç adım kaldı. Son adımlarımızın ilki ise fetch metodu. Oluşturduğumuz context ile kullanacağız. Fakat bildiğiniz gibi bu işlemde herhangi bir hata döndürebilir. Bu yüzden do-try-catch bloğu içinde oluşturacağız.

do{
	let results = try context.fetch(fetchRequest)
}catch {
	print(“Error”)
}

Context.fetch yapısı bize bir dizi döner. Bizim verileri sağlıklı bir şekilde çekebilmemiz için bu verileri Core Data model objesi olarak cast etmemiz gerekiyor. Bu sayede akan veriden sadece bir veri ile ilgilenebilelim.

do{
	let results = try context.fetch(fetchRequest)
	for result in results as! [NSManagedObject] {
		if let test = result.value(forKey: “test1”) as? String {
	self.textField.text = test
}
	
}
}catch {
	print(“Error”)
}

Görüldüğü gibi Core Data model objesi olarak aldıktan sonra result.value ile istediğimiz değerleri çekebildik. Burada test amaçlı yazdık fakat siz oluşturduğunuz attribute’lar dan istediğinizi forKey kısmına yazıp çekebilirsiniz. Fakat çektiğiniz değeri türü ile cast etmeyi unutmayın.  Burada sizlerle ufak bir detay daha paylaşmak istiyorum. Eğer çektiğiniz veride bazı filtreler uygulamak istiyorsanız predicate metodunu kullanabilirsiniz. Kullanımına bakacak olursak;

let idString = testID.uuidString
fetchRequest.predicate = NSPredicate(format : “id = %@”, idString!)

Gördüğünüzü gibi biz kaydedilen verilere atadığımız UUID ile bir filtreleme oluşturduk. Format kısmında bunu belirttik. Argüman kısmına da ne ile filtreleyeceğimizi yazmış olduk. Bu sayede tek bir veriyi çekip göstermiş olduk.


Nasıl Veri Silinir ?

Aslında veri çekme işlemi ile tamamen aynı. Veri çekme işlemini yaptıktan sonra silmek için context.delete metodunu kullanıyoruz.

do{
	let results = try context.fetch(fetchRequest)
	for result in results as! [NSManagedObject] {
		if let test = result.value(forKey: “test1”) as? String {
	context.delete(result)
}
	
}
}catch {
	print(“Error”)
}

Böylece Core Data ile ilgili işlemlerin hemen hemen hepsine bakmış oluyoruz. Daha önceki bu yazımızda UserDefaults ile veri kaydetmiştik. Fakat orada da dediğimiz gibi oldukça küçük verilerdi. Eğer telefonda saklanacak kadar küçük ve UserDefaults da saklanamayacak kadar büyük verilerle çalışıyorsanız Core Data sizler için biçilmiş kaftan. Bu konu ile ilgili bir örnek görmek isterseniz buradan ulaşabilirsiniz.

İnternet sitesi https://synta-x.com
Yazı oluşturuldu 30

Benzer yazılar

Aramak istediğinizi üstte yazmaya başlayın ve aramak için enter tuşuna basın. İptal için ESC tuşuna basın.