Giter Site home page Giter Site logo

Comments (9)

bigfish24 avatar bigfish24 commented on September 25, 2024

@thonydam thanks for the example project, I think you found a bug in Realm, not specifically RBQFRC.

It appears Realm is not handling the compound predicate evaluation correctly. I will escalate this internally with the Realm team and create an issue in the realm-cocoa repo.

from rbqfetchedresultscontroller.

thonydam avatar thonydam commented on September 25, 2024

@bigfish24 ,

I am not sure if this is an issue related to Realm.
I was able to fetch data from Realm using the same predicate, However got the crash with RBQFRC.

from rbqfetchedresultscontroller.

bigfish24 avatar bigfish24 commented on September 25, 2024

@thonydam the issue isn't related to RBQFRC, you are just seeing it there because it is using NSPredicate evaluateWithObject: method. As a sanity check, this code will crash and it isn't using RBQFRC at all:

RLMRealm *realm = [RLMRealm defaultRealm];

[realm beginWriteTransaction];

TestObject *object = [TestObject testObjectWithTitle:@"Test" sortIndex:0 inTable:YES];

TestObject2 *object2 = [TestObject2 testObjectWithTitle:@"Title"];
[object.objects addObject:object2];

[realm commitWriteTransaction];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"inTable = YES AND objects.@count > 0"];

RLMResults *testObjects = [TestObject allObjects];

[predicate evaluateWithObject:testObjects.firstObject]; // Crashes here

From what I have been able to gather, the evaluateWithObject: internally calls valueForKey: on the object with the @count as the key, but Realm is not catching this "special" key and performing the same collection query operation, but instead the key eventually just evaluates an "undefined" and crashes.

from rbqfetchedresultscontroller.

thonydam avatar thonydam commented on September 25, 2024

@bigfish24 Thanks for digging into this. Did you created an issue on the realm repo?

I am doing some test performance with RBQFRC and it seems like that fetching data is pretty slow.

Looking at the example project, it takes ~40ms to fetch data using the RBQFRC. With the same predicate, getting the objects directly from realm is taking ~1ms.

Have you experienced any performance issue?

from rbqfetchedresultscontroller.

bigfish24 avatar bigfish24 commented on September 25, 2024

@thonydam the performance difference is entirely expected because RBQFRC has to copy all of the objects from the fetch (this enables the grouping). Whereas with Realm the query is evaluated but the objects are lazy loaded only when accessed and the data isn't copied... That's part of what makes Realm so fast. So RBQFRC is a less than ideal abstraction to enable this extra functionality, but luckily Realm is working on building fine grained notifications directly into the framework which will make RBQFRC eventually irrelevant.

from rbqfetchedresultscontroller.

thonydam avatar thonydam commented on September 25, 2024

@bigfish24 Thanks for the details!

from rbqfetchedresultscontroller.

bigfish24 avatar bigfish24 commented on September 25, 2024

No worries, I look forward to sunsetting RBQFRC once Realm has support directly. This issue tracks the progress: realm/realm-swift#601 of which the effort internally is getting close. The KVO support added recently laid the groundwork for it.

from rbqfetchedresultscontroller.

bigfish24 avatar bigfish24 commented on September 25, 2024

@thonydam just wanted to let you know that the original issue was fixed in Realm with this PR: realm/realm-swift#2989

from rbqfetchedresultscontroller.

thonydam avatar thonydam commented on September 25, 2024

@bigfish24 Thank you for the update!

from rbqfetchedresultscontroller.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.