2016-02-03 16 views
6

Kısa bir süre önce yeni bir şube oluşturdum ve Realm değerini CoreData üzerinden vermek için kodumun çoğunu yeniden oluşturmayı denedim. Ama şu ana kadar kodumu çalıştırmak için hiç şansım olmadı.RealmSwift: Farklı şema sürümüyle zaten açılan yoldaki bölge

İlk olarak, shared_realm.cpp dosyasında bir istisna atılır. hatayı atar kod satırı: Ben bu istisna üzerine atlarsanız

if (realm->config().schema_version != config.schema_version && config.schema_version != ObjectStore::NotVersioned) { 
    throw MismatchedConfigException("Realm at path already opened with different schema version."); 
} 

, aşağıdaki kod ikinci satırında yakalar:

class func getAllCategories() -> Results<Category> { 
    let realm = try! Realm() 
    let categories = realm.objects(Category) 

    return categories 
} 

Ve bu hata mesajını atar:

fatal error: 'try!' expression unexpectedly raised an error: Error Domain=io.realm Code=1 "Realm at path already opened with different schema version." UserInfo={NSLocalizedDescription=Realm at path already opened with different schema version., Error Code=1}

Ben Realm için tamamen yeniyim, bu nedenle herhangi bir yardım takdir edilmektedir. Belgelerimden anladığım kadarıyla, Realm(), varsayılan veritabanına erişmenin en uygun yoludur, bu da şu anki amacım için uygun. İlk başta belki de bir Diyarın etrafından geçmesi gerektiğini düşündüm, ancak çevrimiçi örneklerden bunun göründüğü gibi olmadığını görüyorum.

Temizledim, simülatörleri değiştirdim ve hatta Xcode'u güncelledim. Ayrıca bu kod satırını şu şekilde yorumlamaya çalıştım:

no boşuna. Oldukça kayıp hissetmek, böylece herhangi bir yön takdir edilir.

+1

Realm için varsayılan yapılandırmayı kurmak için Realm 'Configuration' nesnesinin herhangi bir yeri var mı? Öyleyse, lütfen buraya postalayabilir misiniz? Ayrıca, 'Category' nesnesinde çok fazla geliştirme değişikliği yapıyorsanız, Realm dosyasını disk üzerinde silmeyi ve Realm'ın yeni bir tane oluşturmasını sağlamayı denediniz mi? – TiM

cevap

1

Bir yolun şema sürümü açıldıktan sonra değiştirilemez, bu nedenle yolu setSchemaVersion ile çağırmadan önce şemayı değiştirmeniz gerekir.

setSchemaVersion(1, realmPath: Realm.defaultPath) { (migration, oldSchemaVersion) -> Void in 
    if oldSchemaVersion < 1 { 
     migration.enumerate(Category.className(), { (oldObject, newObject) -> Void in 
      let constant = oldObject!["constant"] as! String 
      newObject!["constant"] = constant 
     }) 
    } 
} 
1

sen şemayı değiştirdi çünkü zaten sadece bir tahmin, ayrıca mevcut krallığını temizler, hangi bir uygulamayı silmek ve yeniden tarafından bu teyit edebilir (bir kez uygulamayı inşa sonra, bu sorun haline çalışıyor olabilir Bu sorun gerçekten de ise veritabanı.)

, bu sorunu gidermek için önerilen bir yolu özetlemektedir https://realm.io/docs/swift/latest/#migrations içine bakmak gerekir.

İlgili konular