NSCoding ve NSKeyedArchiver kullanarak iOS uygulamalarınızda verilerinizi nasıl saklayabileceğinizi öğrenin Kodlama, arşivleme, şifreleme ve daha fazlasını keşfedin Detaylı rehberimize göz atın 160 characters
NSCoding ve NSKeyedArchiver kullanımı ile iOS uygulamalarınızda verilerinizi en güvenli şekilde saklayabilirsiniz Detaylı bir rehber ve kod örnekleri burada! 154 characters
NSCoding ve NSKeyedArchiver, iOS uygulama geliştirme sürecinde veri saklama için kullanılan teknolojiler arasında yer alır Bu teknolojilerin kullanımı hakkında ayrıntılı bilgi için tıklayın! 185 characters
NSCoding ve NSKeyedArchiver kullanarak iOS uygulamalarınızın verilerini saklamanın inceliklerini öğrenin Kodlama, arşivleme ve daha fazlası hakkında ayrıntılı bilgi için sayfamızı ziyaret edin 195 characters
NSCoding ve NSKeyedArchiver ile iOS uygul

Merhaba! Bu makalede, iOS platformundaki verilerin kalıcı olarak saklanması için kullanılan NSCoding ve NSKeyedArchiver konuları hakkında bilgi vereceğim.
NSCoding, bir sınıfın veya yapının özelliklerinin serialleştirilmesi (nesne grafiği haline getirilmesi) ve unserialleştirilmesi (nessenin grafiğin özelliklerine geri dönüştürülmesi) işlemini sağlayan bir protokoldür. Ayrıca, NSKeyedArchiver, NSCoding protokolüne uyan nesnelerin arabelleğe yazılması (encoding) ve diskten okunması (decoding) işlemlerini gerçekleştiren bir sınıftır.
Bu konular ile iOS uygulamalarında verileri kalıcı olarak saklamak mümkündür. Sınıflar ve yapıları seri hale getirerek arabellek veya disk üzerinde depolanabilirler ve böylece veriler her uygulama açıldığında ulaşılabilir olur.
NSCoding Nedir?
NSCoding, bir yazılım geliştirme protokolüdür. Bu protokol sayesinde bir sınıf ya da yapının özelliklerinin seri hale getirilmesi ve nesne grafiği haline getirilmesi mümkündür. Bu sayede, sınıfın özellikleri arabellek ya da disk üzerinde saklanabilir. Yine aynı şekilde, önceden seri hale getirilen bir nesnenin de unserialleştirilerek özellikleri geri dönüştürülebilir.
Bir örnek vermek gerekirse, bir sınıfın içinde birden fazla özellik yer alabilir. Bu özellikler arasında, örneğin bir metin, bir resim ya da bir sayı da olabilir. NSCoding protokolünü kullanarak, bu özellikler seri hale getirilerek önceden belirlenmiş bir formata uygun hale getirilir. Bu sayede, bu sınıf örneği arabellekte ya da disk üzerinde saklanabilir. Sonrasında ise, seri hale getirilen özellikler geri dönüştürülerek asıl sınıf örneği oluşturulabilir.
NSKeyedArchiver Nedir?
NSKeyedArchiver, iOS platformunda verilerin kalıcı olarak saklanması için kullanılan önemli bir sınıftır. Bu sınıf, NSCoding protokolüne uyan nesnelerin encoding ve decoding işlemlerini gerçekleştirmektedir. Encoding işlemi, bir nesnenin özelliklerinin arabellekte veya diske yazılmasıdır. Decoding işlemi ise, önceden kodlanmış bir nesnenin belirtilen anahtara göre çözümlenmesidir.
Bu sayede, NSKeyedArchiver kullanarak bir nesnenin özelliklerini kodlayıp belirli bir anahtarla birlikte arabellekte veya diske kaydedebiliriz. Ayrıca, kaydedilmiş bir nesneyi geri yüklemek istediğimizde de belirli bir anahtara göre decoding işlemi gerçekleştirebiliriz.
NSKeyedArchiver sınıfı sadece temel veri tiplerini (int, double, string vb.) değil, aynı zamanda custom sınıfları ve yapıları da encoding ve decoding işlemlerinde kullanabiliriz. Bu sayede, kendi sınıflarımızı NSCoding protokolüne uygun hale getirerek, bu sınıfı kullanarak verilerimizi kolayca kaydedip geri yükleyebiliriz.
NSCoding Kullanımı
NSCoding protokolü, iOS uygulamaları için verilerin kalıcı olarak saklanmasına olanak tanır. Sınıflar ve yapılar, NSCoding kullanarak seri hale getirilebilir ve arabellek veya disk üzerinde depolanabilir. Bu sayede, kullanıcının uygulama yeniden başlatıldığında veya cihaz yeniden başlatıldığında verilerin kaybolması önlenir.
NSCoding kullanımı için, öncelikle sınıfların NSCoding protokolüne uyumlu hale getirilmesi gerekir. Bu, encode(with coder: NSCoder) ve init(coder aDecoder: NSCoder) / required init?(coder aDecoder: NSCoder) metodları kullanılarak yapılır. encode metodu, sınıfın özelliklerinin kodlanması için kullanılırken, init metodları ise kodlanmış verileri çözmek için kullanılır.
NSCoding'i kullanarak verileri kodladıktan sonra, NSKeyedArchiver kullanarak arabellekte veya diskte depolayabiliriz. NSKeyedArchiver, NSCoding protokolüne uyan nesnelerin kodlanması ve çözülmesi için kullanılan bir sınıftır. Bu sınıfı kullanarak, encode(_ object: Any?, forKey key: String) ve decodeObject(forKey key: String) metodları kullanarak verilerinizi arabellek veya disk üzerinde depolayabilirsiniz.
NSCoding ve NSKeyedArchiver kullanımı oldukça basit olsa da, doğru bir şekilde uygulanması önemlidir. Bir dizi kodlama hatasıyla karşılaşmak, veri kaybına neden olabilir. Bu nedenle, doğru kullanımları öğrenmek ve uygulamak, veri kaybını önlemek için önemlidir.
encode(with coder: NSCoder) Metodu
= Bu metot, sınıfın özelliklerinin kodlanması için kullanılır. Kodlama işlemi, sınıfın belirtilen NSKeyedArchiver objesiyle uyumlu hale getirilmesini sağlar. Bu sayede sınıf örneklerini arabellekte veya diske yazmak için kullanabiliriz.
Ayrıca, encode(with coder: NSCoder) metodu kullanılarak, nesnelerin belirli özelliklerini kodlamak mümkündür. Bu özellikler kullanılarak nesne, daha sonra tekrar oluşturulabilir ve özellikleri geri yüklenebilir. Kodlama işlemi sırasında, sınıfın tüm özellikleri, anahtar değeriyle birlikte NSKeyedArchiver objesine kaydedilir.
Kodlama işlemi başarılı olduğunda, veriler sınıfın örneklerinde kalıcı olarak depolanabilir. Örneğin, bir kullanıcının tercihleri, uygulamanın sonraki açılışında yeniden yüklenebilir. encode(with coder: NSCoder) metodu, sınıfın verilerinin güvenli bir şekilde depolanmasını sağlar.
init(coder aDecoder: NSCoder) / required init?(coder aDecoder: NSCoder)
= NSCoding protokolüne uyan bir sınıf için 'init(coder: NSCoder)' veya 'required init?(coder: NSCoder)' metotları kullanılır. Bu metotlar, kodlanmış verileri çözerek sınıfın özelliklerine geri dönüştürür.
Sınıfın özellikleri kod çözmeden önce NSKeyedUnarchiver ile kodlanmış bir nesneden alınır. Bu metot, özellikleri düzgün şekilde çözemediği durumlarda Optional tipteki 'required init' metodu kullanılır.
Her iki metot da NSCoder sınıfını parametre olarak alır. Bu sınıf, kodlanmış verileri okumak ve sınıf özelliklerine dönüştürmek için kullanılır.
NSKeyedArchiver Kullanımı
NSKeyedArchiver, NSCoding protokolüne uyan nesneleri diskte saklayabilmemizi mümkün kılar. Kodlama işlemi yaparken, bir nesneyi belirtilen anahtarla birlikte NSKeyedArchiver objesine kodlarız. Geri yüklemek için ise NSKeyedUnarchiver kullanılır.
Bir örnek ile açıklamak gerekirse, bir kullanıcının profil bilgilerini kaydetmek istediğimizi varsayalım. Bunun için bir Profile isimli sınıfımız olsun. Bu sınıfı NSCoding protokolüne uygun hale getirerek aşağıdaki gibi kodlayabiliriz:
Profile | NSCoding protokolüne uygun hale getirilmiş sınıf |
---|---|
class Profile { var name: String var age: Int } | class Profile: NSObject, NSCoding { var name: String var age: Int init(name: String, age: Int) { self.name = name self.age = age } required init?(coder: NSCoder) { name = coder.decodeObject(forKey: "name") as! String age = coder.decodeInteger(forKey: "age") } func encode(with coder: NSCoder) { coder.encode(name, forKey: "name") coder.encode(age, forKey: "age") } } |
Yukarıdaki örnekte, Profile sınıfı NSCoding protokolüne uygun hale getirilmiştir. init(coder aDecoder: NSCoder) metodu, sınıfın özelliklerini çözmek için, encode(with coder: NSCoder) metodu ise sınıfın özelliklerinin kodlanması için kullanılmıştır.
Profil örneğimizi NSKeyedArchiver ile kodlamak ve depolamak için aşağıdaki kodlar kullanılabilir:
let profile = Profile(name: "John Doe", age: 25)let data = NSMutableData()let archiver = NSKeyedArchiver(forWritingWith: data)archiver.encode(profile, forKey: "profile")archiver.finishEncoding()UserDefaults.standard.set(data, forKey: "profile")
Daha sonra kullanıcı profil bilgilerine ihtiyaç duyduğumuzda, aşağıdaki kodlar yardımıyla önce nesneyi çözerek daha sonra istediğimiz özelliklerini kullanabiliriz:
if let data = UserDefaults.standard.object(forKey: "profile") as? Data { let unarchiver = NSKeyedUnarchiver(forReadingWith: data) let profile = unarchiver.decodeObject(forKey: "profile") as! Profile unarchiver.finishDecoding() print("Name: \(profile.name)") print("Age: \(profile.age)")}
Yukarıdaki örnekte, UserDefaults ile profil verilerimizi sakladık ve daha sonra NSKeyedUnarchiver kullanarak nesneyi çözdük. Profil özellikleri, Profile sınıfının özellikleri ile eşleşerek kullanıldı.
encode(_ object: Any?, forKey key: String)
= Bu metot, bir nesneyi belirtilen anahtarla birlikte NSKeyedArchiver objesine kodlamak için kullanılır. Bu metotu kullanarak, içinde istediğimiz verileri bulunduran bir nesneyi NSKeyedArchiver ile kodlayabiliriz. Bu nesnenin hafızada tutulması yerine, arabellekte veya diskte saklanmasını sağlar. Örneğin, bir kullanıcının profil bilgilerinin bir NSDictionary nesnesi içinde saklandığını düşünelim. Bu bilgileri, "kullaniciBilgileri" adlı bir anahtar ile bir NSKeyedArchiver objesine ekleyebiliriz.
Aşağıdaki örnekte, "Person" adlı bir sınıftaki özellikleri kodlayıp arabellekte saklamak için "encode(_ object: Any?, forKey key: String)" metodu kullanılmıştır:
class Person: NSObject, NSCoding { |
---|
var name: String |
var age: Int |
init(name: String, age: Int) { |
self.name = name |
self.age = age |
} |
required init?(coder aDecoder: NSCoder) { |
name = aDecoder.decodeObject(forKey: "name") as! String |
age = aDecoder.decodeInteger(forKey: "age") |
} |
func encode(with aCoder: NSCoder) { |
aCoder.encode(name, forKey: "name") |
aCoder.encode(age, forKey: "age") |
} |
} |
Bu örnekte, NSCoding protokolü implemente edilerek Person sınıfı kodlanmış ve disk veya arabellekte tutulmak için hazır hale getirilmiştir.
Genel olarak, "encode(_ object: Any?, forKey key: String)" yöntemi, NSCoding protokolü için kullanılan bir yöntemdir ve bir nesneyi belirtilen bir anahtarla kodlamak için kullanılır. Bu sayede, verileri kaydederek iOS uygulamalarındaki herhangi bir değişikliği kalıcı hale getirebilirsiniz.
decodeObject(forKey key: String) -> Any?
= NSKeyedUnarchiver, verilen anahtara göre önceden kodlanmış bir nesneyi çözmek için kullanılır. Bu metot, encode(_ object: Any?, forKey key: String) metoduyla kodlanmış nesnelerin geri yüklenmesi için oldukça faydalıdır. Örneğin, sınıfın encode(_:) metodu, özellikleri için anahtarlar belirleyerek sınıf örneklerini kodlayabilir. Bu kodlanmış örneği, daha sonra geçerli anahtarı kullanarak bu metotla çözebilir ve eski değerlerine yeniden erişebilirsiniz.
Bu metot, özellikle kalıcı depolama işlemleri için yararlıdır. Örneğin, kullanıcılar uygulamanızdan çıkarken verileri otomatik olarak kaydedebilirsiniz. İlerleyen zamanlarda, aynı verileri yeniden yükleme ihtiyacı duyduğunuzda, bu çözme işlemi sayesinde sadece birkaç satır kod ekleyerek verilerinizi yeniden yükleyebilirsiniz.
NSCoding ve NSKeyedArchiver Örneği
NSCoding ve NSKeyedArchiver özelliklerinin kullanımını anlattığımız bu makalemizde, bir sınıfın NSCoding protokolü ile nasıl uyumlu hale getirildiği, NSKeyedArchiver ile bir nesnenin nasıl kodlandığı ve çözümlendiği bir örnekle açıklanacaktır.
Örneğimizde, bir Öğrenci sınıfı oluşturarak NSCoding protokolü ile uyumlu hale getireceğiz. Sınıfımızın özellikleri öğrenci adı, numarası ve notları olacak.
İlk adım olarak, sınıfımızı NSCoding protokolüne uyumlu hale getirmek için encodeWithCoder metodu için NSCoder objesini kullanarak sınıfın özelliklerini kodlamamız gerekiyor. Kodumuz aşağıdaki gibi olacaktır:
Kod |
---|
class Ogrenci: NSObject, NSCoding { var adi:String var numara:Int var notlar:[String:Double] init(adi:String, numara:Int, notlar:[String:Double]) { self.adi = adi self.numara = numara self.notlar = notlar } required convenience init(coder aDecoder: NSCoder) { let adi = aDecoder.decodeObject(forKey: "adi") as! String let numara = aDecoder.decodeInteger(forKey: "numara") let notlar = aDecoder.decodeObject(forKey: "notlar") as! [String : Double] self.init(adi: adi, numara: numara, notlar: notlar) } func encode(with aCoder: NSCoder) { aCoder.encode(adi, forKey: "adi") aCoder.encode(numara, forKey: "numara") aCoder.encode(notlar, forKey: "notlar") } } |
Sınıfımızı NSCoding protokolüne uygun hale getirdikten sonra, sınıf örneğimizi bir NSKeyedArchiver objesi kullanarak kodlamaya hazırız. Örneğimizde, bir öğrencinin adı, numarası ve notlarını içeren bir örnek oluşturacağız ve bunu bir NSKeyedArchiver objesi kullanarak kodlayacağız:
Kod |
---|
let ogrenci = Ogrenci(adi: "Ali", numara: 1001, notlar: ["Matematik": 85.0, "Fizik": 90.0, "Kimya": 80.0]) let arsivDosyasi = NSKeyedArchiver.archivedData(withRootObject: ogrenci) |
Öğrenci örneğimizi bir arşiv dosyası olarak kaydettikten sonra, NSKeyedUnarchiver objesini kullanarak kodumuzu geri çözebiliriz:
Kod |
---|
let ogrenci2 = NSKeyedUnarchiver.unarchiveObject(with: arsivDosyasi) as! Ogrenci print(ogrenci2.adi) // Ali print(ogrenci2.numara) // 1001 print(ogrenci2.notlar) // ["Matematik": 85.0, "Fizik": 90.0, "Kimya": 80.0] |
Bu örnek sayesinde, bir sınıfın NSCoding protokolü ile uyumlu hale getirilmesi ve bir NSKeyedArchiver objesi kullanılarak bir nesnenin kodlanması ve çözümlenmesi gösterilmiştir.
Özet
NSCoding ve NSKeyedArchiver konuları, iOS platformunda verilerin kalıcı olarak saklanması için oldukça önemlidir. NSCoding protokolü sayesinde bir sınıfın veya yapının özellikleri serialleştirilebilir ve unserialleştirilebilir hale getirilerek arabellek veya disk üzerinde saklanabilir.
NSKeyedArchiver ise, NSCoding protokolüne uyumlu nesnelerin arabelleğe yazılması ve diskten okunması işlemlerini gerçekleştiren bir sınıftır. Bu nedenle, NSCoding ve NSKeyedArchiver konularını kullanarak kendi verilerinizi arabellekte veya disk üzerinde kolayca depolayabilir ve geri çekebilirsiniz.
Bu makalede, NSCoding ve NSKeyedArchiver kullanımı detaylı bir şekilde ele alınmıştır. NSCoding protokolü ile sınıflara ve yapıları seri hale getirerek arabellek veya disk üzerinde saklayabilirsiniz. Bunun için encode(with coder: NSCoder) ve init(coder aDecoder: NSCoder) / required init?(coder aDecoder: NSCoder) metodları kullanılmaktadır.
NSKeyedArchiver kullanarak bir nesneyi arabellekte veya diskte depolamak ve geri yüklemek oldukça basittir. Bunun için encode(_ object: Any?, forKey key: String) ve decodeObject(forKey key: String) -> Any? metodları kullanılır.
Bir örnekle konular daha iyi anlaşılabilir hale getirilebilir. Bu nedenle, bir sınıfın NSCoding protokolü ile uyumlu hale getirilmesi, NSKeyedArchiver ile bir nesnenin kodlanması ve çözümlenmesi bir örnek ile gösterilecektir.
Sonuç olarak, NSCoding ve NSKeyedArchiver konularını kullanarak kendi verilerinizi arabellekte veya disk üzerinde kalıcı olarak depolayabilir ve geri çekebilirsiniz. Bu sayede, uygulamalarınızda verilerinizi kaybetmeden saklayabilir ve istediğiniz zaman tekrar kullanabilirsiniz.