2016-11-08 8 views
5

मैं अपने आईओएस एप्लिकेशन और एंड्रॉइड एप्लिकेशन के बीच डेटा सिंक्रनाइज़ करने की कोशिश कर रहा हूं। एंड्रॉइड एप्लिकेशन दायरे से ठीक से पढ़ सकता है, लेकिन मेरा स्विफ्ट प्रोग्राम संघर्ष कर रहा है, और त्रुटि संदेश बहुत जानकारीपूर्ण नहीं है।दायरे ऑब्जेक्ट सर्वर: left.optional == right.optional (एंड्रॉइड और आईओएस के बीच डेटा सिंक) पर जोर देने में असफल रहा

2016-11-08 08:53:43.919 iOSRealm[2629:65667] Sync: Connection[1]: Session[1]: Bad changeset received: Assertion failed: left().nullable == right().nullable 

है पता नहीं इसका क्या मतलब मैं या इसे ठीक करने के:

मैं यह त्रुटि संदेश मिल रहा हूँ। यह कैसे मैं अपने आप को क्षेत्र वस्तु सर्वर के साथ प्रमाणित है:

private func synchronouslyLogInUser() throws { 
    SyncUser.authenticateWithCredential(Credential.usernamePassword(username, password: password, actions:.UseExistingAccount), authServerURL: authURL) { (user, error) in 
     print("sent login request") 
     if let user = user { 
      print("user was not nil") 
      self.setDefaultRealmConfiguration(user) 
     } 
     if let error = error where error.code == SyncError.HTTPStatusCodeError.rawValue && (error.userInfo["statusCode"] as? Int) == 400 { 
      print("invalid user and pass") 
     } else { 
      print(error) 
     } 
    } 
} 

private func setDefaultRealmConfiguration(user: SyncUser) { 
    Realm.Configuration.defaultConfiguration = Realm.Configuration(syncConfiguration: (user, realmURL), objectTypes: [Weather.self, Wind.self]) 
    Realm.Configuration.defaultConfiguration.deleteRealmIfMigrationNeeded = true 
    realm = try! Realm() 
} 

मैं देख रहा हूँ उत्पादन कंसोल के लिए मुद्रित किया जा रहा है ताकि मैं जानता हूँ कि लॉगिन प्रयास सफल रहा था। मुझे नहीं लगता कि यह एक विसंगति डेटाबेस के साथ एक समस्या है, क्योंकि मैंने deleteRealmIfMigrationNeeded ध्वज true पर सेट किया है।

इस त्रुटि संदेश का क्या अर्थ है और मैं इसे कैसे ठीक करूं?

उपयुक्त ऑब्जेक्ट रियलम सर्वर लॉग यहां पाए जा सकते हैं: http://pastebin.com/raw/J9mU4H0u - ऑफ-साइट लिंक के लिए मेरी क्षमा, लेकिन यह एक लंबी लॉग फ़ाइल है।

मेरे स्विफ्ट मॉडल इस प्रकार हैं:

class Weather : Object { 
    dynamic var id = 0 
    dynamic var date = "" 
    dynamic var forecast = "" 
    dynamic var humidity = "" 
    dynamic var wind: Wind! 

    override class func primaryKey() -> String? { 
     return "id" 
    } 
} 

class Wind: Object { 
    dynamic var direction = "" 
    dynamic var speed = "" 
} 

एंड्रॉयड मॉडल:

public class Weather extends RealmObject { 
    @PrimaryKey 
    public int id; 
    public String date; 
    public String forecast; 
    public String humidity; 
    public Wind wind; 
} 

public class Wind extends RealmObject { 
    public String direction; 
    public String speed; 
} 

अग्रिम धन्यवाद!

उत्तर

6

पता लगाया गया कि क्या हो रहा था। इसके अलावा, जावा String परिभाषा के अनुसार शून्य (या Optional यदि आप चाहें) है। स्विफ्ट में, मैं अपने मॉडल को गैर-Optional स्ट्रिंग्स पर मैप करने के लिए कह रहा था। यही कारण है कि त्रुटि संदेश ने कहा कि यह left.optional == right.optional पर जोर दे रहा है।

तो, मुझे इसे ठीक करने के लिए क्या करना था, मेरे स्विफ्ट मॉडल optional में प्रत्येक String बना दिया गया था)।

यहाँ देखें:

class Weather : Object { 
    dynamic var id = 0 
    dynamic var date: String? 
    dynamic var forecast: String? 
    dynamic var humidity: String? 
    dynamic var wind: Wind? 

    override class func primaryKey() -> String? { 
     return "id" 
    } 
} 

class Wind: Object { 
    dynamic var direction: String? 
    dynamic var speed: String? 
} 
+0

अच्छी तरह से मिल गया! मैंने रियलम मोबाइल प्लेटफ़ॉर्म के साथ क्रॉस-संगतता के संबंध में हमारी आंतरिक चर्चाओं में इसे हाइलाइट किया है और हम भविष्य में इसे और अधिक स्पष्ट बनाने की कोशिश करेंगे। साझा करने के लिए धन्यवाद! :) – TiM

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