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

rfj*_*001 11 realm uialertview ios

所以我不知道为什么我会收到这个错误.错误消息如下:

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

并在执行此代码时抛出.

- (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];
    }
}
Run Code Online (Sandbox Code Playgroud)

我很清楚我在写一个事务中写作.这是Realm的错误吗?或者我错过了什么......?

Sim*_*mon 17

beginWriteTransactioncommitWriteTransaction必须在相同的领域,你正在修改的对象是所谓的.每次你打电话时[RLMRealm defaultRealm],你得到一个新的境界.这不会是同一个领域self.chatSession.要解决这个问题,首先要确认你self.chatSession的领域与你的同一个队列queueForWrites(当然我假设self.chatSession是a RLMObject).然后,只需在块内执行以下操作:

[self.chatSession.realm beginWriteTransaction];
self.chatSession.myAlias = alertTextField.text;
[self.chatSession.realm commitWriteTransaction];
Run Code Online (Sandbox Code Playgroud)