2016-04-24 6 views
6

Bir sınıf için başlatıcı sağlamak istediğimde Realm çalışmıyorum, Xcode sonsuza kadar hata önerir. RealmSwift başlatıcıları - Xcode düzeltmesi yanlış oluyor

Ben daha kolay ben önerileri uygulayın ve bu

enter image description here

son ile bitirmek hataları

enter image description here

görmek yapmak yerine kod parçasındaki iki ekran görüntüsü yüklemeye karar hata "Bildirilmemiş türün kullanımı 'RLMObjectSchema'

RealmSwift

son 0.99 sürümü

cevap

10

Bkz Realm, sorgulama için nesneleri başlatmak amacıyla varsayılan başlatıcıya ihtiyaç duyar. Realm'ye sorgulama yaparken, Realm nesneleri başlatmak için varsayılan başlatıcıyı dahili olarak çağırır.

Ayrıca varsayılan başlatıcıyı da geçersiz kılabilirsiniz, ancak önermiyoruz. Varsayılan başlatıcıyı geçersiz kıldığınızda, Swift tipi sistem sınırlaması nedeniyle ObjC katmanından miras alınan diğer gerekli başlatıcıları geçersiz kılmalısınız. Ayrıca, hem Realm hem de RealmSwift çerçevelerini içe aktarmalısınız. Çünkü bu başlatıcıların parametrelerinde Objective-C tek sınıf var. Bu işleri

import RealmSwift 
import Realm // Need to add import if you override default initializer! 

class Item: Object { 
    dynamic var isBook: Bool = true 
    dynamic var numberOfPages: Double = 0 
    dynamic var isInForeignLanguage: Bool = true 
    dynamic var isFictional: Bool = true 
    dynamic var value: Int { 
     get { 
      return calculalatedValue() 
     } 
    } 

    required init() { 
     super.init() 
    } 

    required init(realm: RLMRealm, schema: RLMObjectSchema) { 
     super.init(realm: realm, schema: schema) 
    } 

    required init(value: AnyObject, schema: RLMSchema) { 
     super.init(value: value, schema: schema) 
    } 
+0

Teşekkür çok! Bu nedenle, başlatmanın başa çıkması için önerilen yol, ilk kod snippet'idir. İlk varsayılan başlatıcılar devreye girdikten sonra kolaylık sağladı mı? – DCDC

+1

Evet. Başlatma ile başa çıkmak için önerilen yol, ilk kod snippet'idir. ve İlk varsayılan başlatıcılar devreye girer, ardından kolaylık başlangıçları. –

1

Dene:

class Item: Object { 
    dynamic var isBook: Bool = true 
    dynamic var numberOfPages: Double = 0 
    dynamic var isInForeignLanguage: Bool = true 
    dynamic var isFictional: Bool = true 
    dynamic var value: Int { 
     get { 
      return calculalatedValue() 
     } 
    } 

    convenience init(isBook: Bool, numberOfPages: Double, isInForeignLanguage: Bool, isFictional: Bool) { 
     self.init() 
     self.isBook = isBook 
     self.numberOfPages = numberOfPages 
     self.isInForeignLanguage = isInForeignLanguage 
     self.isFictional = isFictional 
    } 

    ... 
} 

yüzünden varsayılan başlatıcısı geçemeyeceğim:

required convenience init(...) { 
    self.init() 
    ... 
} 

önerilen yöntem aşağıdaki gibi memberwise kolaylık başlatıcısı yaratıyor https://github.com/realm/realm-cocoa/issues/1849

+0

Evet, ancak defalut başlatıcıları getirilmesi atlamak için herhangi bir yolu eq yerine dinamik var isBook arasında var: true Bool = sadece başlatma var isBook olmadan bırakın: Bool – DCDC