Domanda

Quindi non ho idea del motivo per cui ricevo questo errore.Il messaggio di errore è il seguente:

* APP di terminazione a causa dell'accezione non rilevata "rlmexception", motivo: "Tentativo di modificare l'oggetto al di fuori di una transazione di scrittura - Chiama per principianti Prima di tutto. * First Throw Call Stack: (0x2F7B0F83 0x3F7F0F83 0x39F61CCF 0xC46EF 0xc3c23 0xc0c9d 0xb3e73 0x3a449833 0x3a4449 0x3a44a297 0x3a45c88d 0x3a45cb21 0x3a58bb21 0x3a58BBD3 0x3A58BA98) libc ++ abi.dylib: terminazione con eccezione non rilevata del tipo nsexception

ed viene generato durante l'esecuzione di questo codice.

- (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];
    }
}
.

È abbastanza chiaro che sto scrivendo all'interno di una transazione di scrittura.È un bug con il regno?O mi manca qualcosa ...?

È stato utile?

Soluzione

Il beginWriteTransaction e commitWriteTransaction devono essere chiamati sullo stesso regno dell'oggetto in cui si sta modificando è. Ogni volta che si chiama [RLMRealm defaultRealm], stai ricevendo un nuovo regno.Questo non sarà lo stesso regno che è in self.chatSession.Per risolvere ciò, confermare innanzitutto che il regno del self.chatSession è sulla stessa coda del tuo queueForWrites (sto assumendo self.chatSession è un RLMObject, ovviamente).Quindi, basta fare il seguente interno del blocco:

[self.chatSession.realm beginWriteTransaction];
self.chatSession.myAlias = alertTextField.text;
[self.chatSession.realm commitWriteTransaction];
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top