2016-04-24 7 views
6

जब मैं कक्षा के लिए प्रारंभकर्ता प्रदान करना चाहता हूं तो मुझे रियलम काम नहीं मिल रहा है, एक्सकोड अंतहीन त्रुटियों का सुझाव देता है।RealmSwift प्रारंभकर्ता - एक्सकोड फिक्स- यह गलत हो रहा है

मैं यह आसान त्रुटियों

enter image description here

को देखने के लिए मैं सुझावों का पालन करें और इस

enter image description here

पिछले अंत बनाने के लिए कोड स्निपेट के बजाय दो स्क्रीनशॉट अपलोड करने का निर्णय लिया त्रुटि बताती है "अविकसित प्रकार का उपयोग 'RLMObjectSchema'

मैं उपयोग करता हूं RealmSwift

के नवीनतम संस्करण 0.99

उत्तर

10

सुझाया गया तरीका सदस्य वार सुविधा प्रारंभकर्ता पैदा कर रही है, निम्नलिखित की तरह:

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 
    } 

    ... 
} 

आप डिफ़ॉल्ट प्रारंभकर्ता क्योंकि छोड़ नहीं कर सकते पूछताछ के लिए वस्तुओं को तत्काल करने के लिए दायरे को डिफ़ॉल्ट प्रारंभकर्ता की आवश्यकता होती है। दायरे से पूछताछ करते समय, रियलम ऑब्जेक्ट को तुरंत चालू करने के लिए आंतरिक रूप से डिफ़ॉल्ट प्रारंभकर्ता को कॉल करता है।

आप डिफ़ॉल्ट प्रारंभकर्ता को ओवरराइड भी कर सकते हैं, लेकिन हम इसकी अनुशंसा नहीं करते हैं। क्योंकि जब आप डिफ़ॉल्ट प्रारंभकर्ता को ओवरराइड करते हैं, तो आपको स्विफ्ट प्रकार सिस्टम सीमा के कारण ओबीजेसी परत से विरासत में प्राप्त अन्य आवश्यक प्रारंभकर्ताओं को ओवरराइड करना चाहिए। इसके अलावा आपको Realm और RealmSwift फ्रेमवर्क दोनों आयात करना चाहिए। क्योंकि उन प्रारंभकर्ताओं के मानकों में उद्देश्य-सी केवल कक्षा होती है।

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

धन्यवाद: बूल = सच है, बस प्रारंभ वर isBook बिना छोड़ दो! तो प्रारंभ करने से निपटने के लिए अनुशंसित तरीका पहला कोड स्निपेट है। पहले डिफ़ॉल्ट प्रारंभकर्ता आसानी से सुविधा init के बाद खेल में आते हैं? – DCDC

+1

हां। प्रारंभ करने से निपटने के लिए अनुशंसित तरीका पहला कोड स्निपेट है। और पहले डिफ़ॉल्ट प्रारंभकर्ता सुविधा में शामिल होते हैं, इसके बाद सुविधा init। –

1

प्रयास करें:

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

देखें https://github.com/realm/realm-cocoa/issues/1849

+0

हाँ यह काम करता है, लेकिन वहाँ defalut initializers की शुरूआत छोड़ किसी भी तरह से है, eq गतिशील वर isBook के बजाय: एक बहुत बूल – DCDC

संबंधित मुद्दे