Soru & Cevap

iOS SQLite ile ilgili

16.05.2015 - 12:40

uygulama içerisinde kullandığım sqlite veritabanının yapısında bazı değişiklikler yapıp, yeni bir versiyon olarak uygulamamı güncellediğimde, eski dbyi hatırlıyor ve onu yüklüyor. Uygulamayı komple kaldırıp yüklersem o zaman yeni ve güncel veritabanı sağlıklı çalışıyor. Bu iOS ortamında SQLite versiyon olayı nasıl çalışıyor ?

9 Görüntülenme

3 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-3650-1421928561.jpg
anilsozeri
16.05.2015 - 01:52
Söylediğiniz gibi NSUserDefaults içerisinde bir değer tutup kontrolü sağlayabilirsiniz, bunun hakkında çok fazla kod örneği internette mevcut zaten bahsettiğinize göre sizinde bildiğinize eminim ben yalnızca örnek olması adına bu şekil bir kullanım yapabileceğinizi belirtmek için söyledim, kendi uygulama yapınıza uygun bir algoritma geliştirerek bu kontrolü sağlayabilirsiniz.
Profile picture for user burhanaksendir
burhanaksendir
16.05.2015 - 01:25
class func copyFile(fileName: NSString) {

        var dbPath: String = getPath(fileName as String)
        var fileManager = NSFileManager.defaultManager()

        if !fileManager.fileExistsAtPath(dbPath) {

            var fromPath: String? = NSBundle.mainBundle().resourcePath?.stringByAppendingPathComponent(fileName as String)

            fileManager.copyItemAtPath(fromPath!, toPath: dbPath, error: nil)

        }
    }

Merhaba,
teşekkür ederim. Ben yukardaki gibi bir kullanımla veritabanı eğer yoksa oluşturmasını sağlıyorum. Ancak sizin söylediğiniz boolean bir değişken oluşturup versiyon kontrolü yapma kısmını biraz koda yönelik örnekleyebilir misiniz ?

Kopyalama işlemi yapmadan önce, yani veritabanı oluşturulmadan versiyon kontrolünü nasıl sağlayacağım mesela? NSUserDefaults ile mi ya da nasıl eşleştirme yapacağım ?

picture-3650-1421928561.jpg
anilsozeri
16.05.2015 - 12:56
Merhaba, SQLite'ı kullanırken böyle bir veritabanı yok ise oluştur şeklinde bir kullanım yaptığınızdan dolayı böyle bir durum meydana geliyordur, aksi takdirde zaten program her çalıştığında veritabanına veri yazmak ile uzaktaki bir sunucudan veri çekmenin farkı olmayacaktır bu yüzden programı kaldırıp, yeniden yüklediğinizde çalışıyor. SQLite yapısında bir değişiklik yaptığınızda uygulamanızı güncelleyeceğiniz için içerisindeki yapıya göre indiren kullanıcılar yeniden verileri çekecektir. Buna alternatif olarak boolean bir değişken tarzında düşünürseniz güncelleme var/yok durumunu kontrol ederek veritabanını yeniden oluşturmasını sağlayabilirsiniz. Ayrıca SQLite yerine CoreData kullanımını tercih ederseniz daha kolay çalışabilirsiniz, altyapı da zaten SQLite'ı kullanır fakat CoreData object döndürür. İyi çalışmalar.