2016-04-24 20 views
6

Nie mogę uruchomić Realm działa, gdy chcę, aby inicjator dla klasy, Xcode bez końca sugerują błędy.Inicjatory RealmSwift - naprawa Xcode - ciągle się mylą

postanowiłem przesłać dwa zdjęcia zamiast fragmentu kodu, aby ułatwić, aby zobaczyć błędy

enter image description here

śledzę sugestie i skończyć z tym

enter image description here

ostatniej błąd mówi "Używanie niezadeklarowanego typu" RLMObjectSchema "

Używam najnowszy 0.99 wersja RealmSwift

Odpowiedz

10

Zalecanym sposobem jest tworzenie memberwise ogólnospożywczy inicjatora, jak następuje:

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 
    } 

    ... 
} 

Nie można pominąć domyślny inicjator ponieważ Realm potrzebuje domyślnego inicjalizatora do tworzenia instancji obiektów do odpytywania. Podczas wysyłania zapytań do obszaru, Realm wywołuje domyślnie inicjator, aby utworzyć instancje obiektów.

Można również zastąpić domyślny inicjator, ale nie zalecamy go. Ponieważ w przypadku nadpisania domyślnego inicjalizatora, należy zastąpić inne wymagane inicjalizatory odziedziczone z warstwy ObjC z powodu ograniczenia systemu typu Swift. Powinieneś również zaimportować zarówno frameworky Realm, jak i RealmSwift. Ponieważ istnieją tylko klasa Objective-C w parametrach tych inicjalizatorów.

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

Dzięki wielkie! Tak więc zalecanym sposobem radzenia sobie z inicjowaniem jest pierwszy fragment kodu. Pojawiają się pierwsze domyślne inicjalizatory, po czym następuje wygoda init? – DCDC

+1

Tak. zalecanym sposobem radzenia sobie z inicjowaniem jest pierwszy fragment kodu. i pierwsze domyślne inicjatory wchodzą w grę, po czym następuje inicjacja wygody. –

1

Spróbuj:

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

Zobacz https://github.com/realm/realm-cocoa/issues/1849

+0

Yup to działa, jednak jest jakiś sposób, aby pominąć wprowadzanie inicjalizatorów defalut, eq zamiast dynamicznego var isBook: Bool = true, po prostu zostawić bez inicjalizacji var isBook: Bool – DCDC

Powiązane problemy