Pergunta

Portanto, não tenho ideia de por que estou recebendo esse erro.A mensagem de erro é a seguinte:

* Encerramento do aplicativo devido à exceção não detectada 'RLMException', motivo:'Tentativa de modificar o objeto fora de uma transação de gravação - Call BeginWriteTransaction em uma instância RLMRealm primeiro.' * Primeira pilha de chamadas lançadas:(0x2f7b0f83 0x39f61ccf 0xc46ef 0xc3c23 0xc0c9d 0xb3e73 0x3a449833 0x3a449ded 0x3a44a297 0x3a45c88d 0x3a45cb21 0x3a58bbd3 0x3a58ba98) libc++abi.dylib:terminando com exceção não capturada do tipo NSException

E é lançado durante a execução deste 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á bem claro que estou escrevendo dentro de uma transação de gravação.Isso é um bug do Realm?Ou eu estou esquecendo de alguma coisa...?

Foi útil?

Solução

O beginWriteTransaction e commitWriteTransaction deve ser chamado no mesmo domínio em que está o objeto que você está modificando.Cada vez que você liga [RLMRealm defaultRealm], você está obtendo um novo reino.Este não será o mesmo reino que está em self.chatSession.Para corrigir isso, primeiro confirme se self.chatSessionO reino de está na mesma fila que o seu queueForWrites (Estou assumindo self.chatSession é um RLMObject, claro).Então, basta fazer o seguinte dentro do bloco:

[self.chatSession.realm beginWriteTransaction];
self.chatSession.myAlias = alertTextField.text;
[self.chatSession.realm commitWriteTransaction];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top