Pregunta

Entonces no tengo idea de por qué recibo este error.El mensaje de error es el siguiente:

* Finalización de la aplicación debido a una excepción no detectada 'RLMException', motivo:"Intentar modificar el objeto fuera de una transacción de escritura: llamar primero a WRIEWRITRETRANSACTION en una instancia rlmrealm primero". * Pila de llamadas de primer lanzamiento:(0x2f7b0f83 0x39f61ccf 0xc46ef 0xc3c23 0xc0c9d 0xb3e73 0x3a449833 0x3a449ded 0x3a44a297 0x3a45c88d 0x3a45cb21 0x33a58bd3 0x3a58) I.Dylib:terminando con una excepción no detectada de tipo NSException

Y se lanza al ejecutar este código.

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    UITextField * alertTextField = [alertView textFieldAtIndex:0];
    if (![self.chatSession.theirAlias isEqualToString:alertTextField.text]) {
        self.sender = alertTextField.text;
        dispatch_queue_t queue = ((AppDelegate *)[UIApplication sharedApplication].delegate).queueForWrites;
        dispatch_async(queue, ^{
            [[RLMRealm defaultRealm] beginWriteTransaction];
            self.chatSession.myAlias = alertTextField.text; // This is the line where the error is thrown
            [[RLMRealm defaultRealm] commitWriteTransaction];
        });
    } else {
        [self promptForAliasAfterRejection];
    }
}

Está bastante claro que estoy escribiendo dentro de una transacción de escritura.¿Es esto un error con Realm?O me estoy perdiendo algo...?

¿Fue útil?

Solución

El beginWriteTransaction y commitWriteTransaction debe ser llamado en el mismo ámbito en el que se encuentra el objeto que estás modificando.Cada vez que llamas [RLMRealm defaultRealm], obtendrás un nuevo reino.Este no será el mismo reino que está en self.chatSession.Para solucionar este problema, primero confirme que self.chatSessionEl reino de está en la misma cola que el tuyo. queueForWrites (Estoy asumiendo self.chatSession es un RLMObject, por supuesto).Luego, simplemente haz lo siguiente dentro del bloque:

[self.chatSession.realm beginWriteTransaction];
self.chatSession.myAlias = alertTextField.text;
[self.chatSession.realm commitWriteTransaction];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top