Artem Z.
Artem Z.

Reputation: 1243

iOS Realm cascade delete

My models are: First model - Job: idx, title, description

Second model - Specialization: idx, title, RLMArray<Job> jobs

What should I do if I want to delete job and I'd like to delete all specs related to the job. Thanks you in advance. My code is:

[self.storage beginWriteTransaction];
RLMResults *specs = [MBSpecialization objectsInRealm:self.storage where:@"%@ IN jobs", job];
                for (MBSpecialization *spec in specs) {
                    [self.storage deleteObjects:spec];
                }
[self.storage deleteObject:job];
[self.storage commitWriteTransaction];

Upvotes: 2

Views: 1044

Answers (1)

Thomas Goyne
Thomas Goyne

Reputation: 8138

If you want to delete all specializations containing the job being deleted even if they still have other jobs:

[self.storage beginWriteTransaction];
[self.storage deleteObjects:[job linkingObjectsOfClass:MBSpecialization.className forProperty:@"jobs"]];
[self.storage deleteObject:job];
[self.storage commitWriteTransaction];

Alternatively, you may want to just clean up all specializations which no longer have any jobs after this one is deleted:

[self.storage beginWriteTransaction];
[self.storage deleteObject:job];
[self.storage deleteObjects:[MBSpecialization objectsInRealm:self.storage where:@"jobs.@count = 0"]];
[self.storage commitWriteTransaction];

Upvotes: 2

Related Questions