
[英]iOS saving main thread NSManagedObjectContext changes in background
[英]Main thread does not see changes made from background thread
我试图在主线程上看到后台线程所做的更改时遇到了麻烦。
-(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指出来!
谢谢!
因为您没有将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];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.