我在主线程上尝试查看后台线程所做的更改时遇到了麻烦。
-(void) someMethodRunByBackgroundThread
{
RLMRealm *defaultRealm = [RLMRealm defaultRealm];
MyObject *realmObject = [[MyObject alloc] init];
[defaultRealm beginWriteTransaction];
realmObject.myValue = @"Hello World";
realmObject.primaryKey = 1;
[defaultRealm addObject:realmObject];
[defaultRealm commitWriteTransaction];
NSInteger primaryKey = realmObject.primaryKey;
dispatch_async(dispatch_get_main_queue, ^{
completionBlock(primaryKey);
});
}
-(void)completionBlock:(NSInteger)primaryKey
{
MyObject *realmObject = [[MyObject alloc] objectForPrimaryKey:[NSNumber numberWithInteger:primaryKey]];
}
当我的completionBlock被调用时,我无法找到领域对象。请记住,使用GCD将completionBlock分派到主线程上,根据文档,主线程应该自动查看其他线程完成的写入提交。
编辑:我在Realm 0.98.2和0.98.6上试过这个。我目前也在使用XCode 7.3编辑2:在代码“[defaultRealm addObject:realmObject];”中添加了因为我不小心把它弄出来了。谢谢Kishikawa指出来了!
谢谢!
答案 0 :(得分:0)
因为您没有将realmObject
实例添加到defaultRealm
。因此realmObject
并未持久存在defaultRealm
。
要将对象持久保存到Realm,您需要调用-[RLMRealm addObject:]
方法并传递您想要保留的对象。
另见https://realm.io/docs/objc/latest/#adding-objects
[defaultRealm beginWriteTransaction];
realmObject.myValue = @"Hello World";
realmObject.primaryKey = 1;
[defaultRealm addObject:realmObject]; // You should add object to Ream to persist the object
[defaultRealm commitWriteTransaction];