evermeer / EVReflection

Reflection based (Dictionary, CKRecord, NSManagedObject, Realm, JSON and XML) object mapping with extensions for Alamofire and Moya with RxSwift or ReactiveSwift
Other
966 stars 119 forks source link

Realm Object broke after ea87088 #300

Open guilhermearaujo opened 5 years ago

guilhermearaujo commented 5 years ago

I am using EVReflection 5.7.0 and it works fine. After upgrading to 5.8.0 (or 5.90), my Realm Object models no longer work.

Nothing wrong happens during the deserialisation, but when I try to access one of their properties, I get a SIGABRT.

I tested each commit and found changes on https://github.com/evermeer/EVReflection/commit/ea870885cd21b484fd4ada0f1b66e1eb126ebfb3 to be causing this. This is my model declaration:

class Category: Object, EVReflectable {
  @objc dynamic var id: Int = 0
  @objc dynamic var name: String = ""
  @objc dynamic var hexColor: String = ""
  @objc dynamic var imageUrl: String = ""
}

And this is some lldb data from the deserialised object:

(lldb) po category
RealmSwiftObject {
}

(lldb) po category.toJsonString()
"{}"

(lldb) po category.name
error: Execution was interrupted, reason: breakpoint 1.1.
The process has been returned to the state before expression evaluation.

Using 5.7.0, however:

(lldb) po category
Category {
    id = 6;
    name = Some name;
    hexColor = #dd6254;
    imageUrl = https://some.url/image.jpg;
}

(lldb) po category.toJsonString()
"{\"color\":\"#dd6254\",\"id\":6,\"imageUrl\":\"https:\\/\\/some.url\\/image.jpg\",\"name\":\"Some name\"}"

(lldb) po category.name
"Some name"
volkoivan commented 5 years ago

Can confirm, I have the same problem. Took me a day to figure out what happened with the project. And now I'm stuck with broken project, because new Xcode doesn't compile the 5.8.0 version

evermeer commented 5 years ago

When using Xcode 10.2 you should use EVReflection version 5.10.1 or later. If cocoapods installs an earlier version, then you should upgrade cocoapods to version 1.7.0.

evermeer commented 5 years ago

@megavirus74 and @guilhermearaujo could you confirm that you are using EVReflection version 5.10 or later and still have this problem?

guilhermearaujo commented 5 years ago

@evermeer a while ago I decided not to use Realm anymore and switched to the regular EVReflection.

evermeer commented 5 years ago

If someone still has this issue, then just reopen this.

bennettyuan commented 5 years ago

I also encountered the same issue. Finally, I find source cause of this issue. The source is swiftClassTypeFromString(_:). It cannot be convert some Realm class, like List<FooRealmObject>.

I modified setPropertiesfromDictionary(_:anyObject:conversionOptions:forKeyPath:) back to:

if let c = original as? EVCustomReflectable {
    if let v = c.constructWith(value: value) {
        value = v
    }
}

Then solved this issue of Realm crash. (But, this is a temporary solution)

I think we need rethink how to "construct" better.

evermeer commented 5 years ago

@bennettyuan18 I will have a look at this later. Reopening this issue so that I won't forget.

tobyworks commented 4 years ago

For anyone with the same issue for now you can use my fork in your podfile:

  pod 'EVReflection/Realm', :git => 'https://github.com/tobybonhof/EVReflection'