尝试在写入事务之外修改对象

所以我不知道为什么我得到这个错误。 错误消息如下所示:

*由于未捕获的exception“RLMException”而终止应用程序,原因是:“尝试修改写事务之外的对象 – 首先在RLMRealm实例上调用beginWriteTransaction。 *第一次调用堆栈:(0x2f7b0f83 0x39f61ccf 0xc46ef 0xc3c23 0xc0c9d 0xb3e73 0x3a449833 0x3a449ded 0x3a44a297 0x3a45c88d 0x3a45cb21 0x3a58bbd3 0x3a58ba98)libc ++ abi.dylib:以NSExceptiontypes的未捕获exception

执行此代码时被抛出。

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

很清楚,我正在写一个写交易。 这是Realm的错误吗? 还是我错过了什么…?

beginWriteTransactioncommitWriteTransaction必须在你正在修改的对象所处的同一个领域中调用。每次调用[RLMRealm defaultRealm] ,你都会得到一个新的领域。 这不会是self.chatSession的同一个领域。 为了解决这个问题,首先确认self.chatSession的领域和你的queueForWrites在同一个队列中(当然,我假定self.chatSession是一个RLMObject )。 然后,只需在块内执行以下操作:

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