2014-10-14 18 views
5

Desidero creare una vista di modifica per un modello di oggetto esistente in un database Realm.io. Il controller della vista ha un pulsante di salvataggio che dovrebbe mantenere le modifiche e un pulsante di annullamento che dovrebbe eliminare le modifiche.Annulla modifica Visualizza database Realm.io

non posso modificare un RLMObject al di fuori di una transazione di scrittura, quindi qual è il metodo consigliato di modificare temporaneamente un RLMObject mi permette di annullare le modifiche in seguito, se necessario?

risposta

1

È possibile passare l'oggetto realm al controller di visualizzazione di modifica come oggetto in memoria per eseguire le modifiche. In questo modo:

RLMRealm *realm = [RLMRealm defaultRealm]; 
[realm beginWriteTransaction]; 
[StringObject createInDefaultRealmWithObject:@[@"a"]]; 
[realm commitWriteTransaction]; 

StringObject *obj = [[StringObject alloc] initWithObject:[[StringObject allObjects] firstObject]]; 
XCTAssertEqualObjects(obj.stringCol, @"a"); 
obj.stringCol = @"b"; // not in a write transaction 
XCTAssertEqualObjects(obj.stringCol, @"b"); 

se l'utente preme "Salva", quindi è possibile chiamare createOrUpdateInDefaultRealmWithObject: e passare l'oggetto in memoria, che sarà poi passare tutti i valori e aggiornamento che si oppongono a Reame. Si noti che il proprio oggetto deve avere una chiave primaria affinché funzioni.

Se l'utente preme "Annulla", è possibile scartare l'oggetto in memoria come se nulla fosse accaduto.

Nota che intendiamo aggiungere funzionalità di rollback delle transazioni in futuro, che semplificherà questo schema.

+0

Non vedo l'ora di vedere i rollback delle transazioni. – Onato

+0

@jpsim è ancora questo il modo consigliato? Anche se i rollback delle transazioni sono qui ora, penso ancora che l'utilizzo del metodo sia corretto. – allaire

+0

Ora che i rollback sono abilitati, sono il modo preferito per annullare le transazioni di breve durata. Le transazioni di lunga durata traggono vantaggio dall'approccio descritto in questa risposta, poiché le scritture bloccano altre scritture in Realm. Tieni presente che le scritture non bloccano le letture e le letture non bloccano mai altre transazioni. – jpsim

Problemi correlati