Sono in difficoltà con l'eliminazione degli oggetti realm e dei relativi oggetti RLMArray child (e secondari)!Elimina un oggetto realm e tutti i suoi RLMArrays
La figura seguente mostra l'attuale regno-struttura (screenshot del Reame-Browser):
Come si può vedere, ci sono attualmente tre oggetti RLMTopoResult creati, ciascuno con 86 RLMCriteria come bambini -Array. (Ciò che non è visibile è che ognuno di questi RLMCriteria ha anche la sua Array RLMStatistics - ecco perché ci sono tanti oggetti RLMStatistics come oggetti RLMCriteria).
Ora, l'idea è di eliminare un RLMTopoResult (con un predittore che filtra secondo TopoNrRLM)!
applico il seguente codice:
- (void) removeObjects_at_TopoNr_from_LocationRLM :(NSUInteger)TopoNr :(NSString *)folderName :(NSString *)fileName {
RLMRealm *realm = [RLMRealm realmWithPath:[self get_TopoResultRLM_FilePath :folderName :fileName]];
RLMResults *resultTopoResult = [RLMTopoResult allObjectsInRealm:realm];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"TopoNrRLM == %d", TopoNr];
RLMResults *resultsTopoNr = [resultTopoResult objectsWithPredicate:predicate];
if ([resultsTopoNr count] > 0) {
if (TopoNr <= (int)[resultsTopoNr count]) {
[realm beginWriteTransaction];
[realm deleteObject:[resultsTopoNr firstObject]];
[realm commitWriteTransaction];
}
else {
NSLog(@"Fail...trying to remove TopoResult-object with TopoNr bigger to object-count");
}
}
else {
NSLog(@"Fail...trying to remove TopoResult-object in empty Realm");
}
}
L'esecuzione del metodo di cui sopra con TopoNr = 2 eliminazioni (come previsto) il RLMTopoResult Nr2 (vedi provocare-foto in basso) -> Ma, purtroppo, non è così elimina i suoi Array-Children (e subchildren) !!! Dopo la cancellazione di RLMTopoResult-Nr2, ci sono ancora 3x86 = 258 RLMCriteria (e anche 258 RLMStatistics). Ma previsto sarebbe 2x86 = 172 !!!!
Cosa posso fare per eliminare automaticamente anche i 86 RLMCriteria (ei relativi 86 RLMStatistics) allegati al corrispondente RLMTopoResult ???
Qualsiasi aiuto apprezzato!
L'immagine seguente mostra il risultato dopo la cancellazione di TopoResult Nr2 (con codice di cui sopra): (dovrebbe avere 172 RLMCriteria invece di 258 ... ciò che è ancora sbagliata ?? ...!)
Grazie jpsim! Questo ha senso ora. L'avevo risolto fino ad ora spogliando una proprietà "TopoNr" su CriteriaRLM e cercando con un predittore per quelli. Ma la tua soluzione è più elegante. Molte grazie ! – iKK
Un'ulteriore domanda correlata: Che dire se "CriteriaRLM" aveva anche un RLMArray (chiamiamolo "StatisticsRLM"). Non sembra funzionare allo stesso modo, cioè per (RLMTopoResult * topo2 in topos) {[realm deleteObjects: topo2.CriteriaRLM.StatisticsRLM];} non funziona. Eventuali suggerimenti ?? Ancora una volta, sono stato in grado di aggiungere una proprietà aggiuntiva "TopoNr" anche a StatisticsRLM e alla fine potrei anche usare un predittore per eliminarli .... – iKK
Ricorda che 'topo2.CriteriaRLM' è un RLMArray, quindi dovrai iterare su quelli per chiamare 'deleteObjects: criteria.StatisticsRLM' – jpsim