Comments (9)
@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.
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.
@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.
@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.
@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.
@bigfish24 Thanks for the details!
from rbqfetchedresultscontroller.
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.
@thonydam just wanted to let you know that the original issue was fixed in Realm with this PR: realm/realm-swift#2989
from rbqfetchedresultscontroller.
@bigfish24 Thank you for the update!
from rbqfetchedresultscontroller.
Related Issues (20)
- Support transient properties for sectionNameKeyPath HOT 4
- Don't release delegate HOT 5
- Crash on `performFetch` - Index is out of bounds
- Ability to turn off excessive logging for debug builds HOT 3
- When init with a empty realm, the `notificationCollection`'s `notificationBlock` might never got call
- Dead lock when FRC -updateFetchRequest in main thread and -calculateChangesWithAddedSafeObjects in background within same time;
- RBQFetchedRequest support for Properties to Group By
- Swift3 no notification passed to the delegate HOT 1
- RealmSwift 2.1.1 HOT 1
- Reintroduce Git Submodules for RBQSafeRealmObject and RealmUtilities HOT 1
- Crash when deleting sectioned objects.
- Constant crash. HOT 1
- Delegate never released HOT 7
- Update Realm dependency to 2.2
- Sorting with localizedCaseInsensitiveCompare
- SectionNameKeyPath cannot be transient? HOT 1
- Can't support Realm 3.0.0? HOT 6
- can not support Realm (3.7.4)
- Not working with swift 4
- Could you make unregisterChangeNotifications public
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rbqfetchedresultscontroller.