繁体   English   中英

主线程看不到后台线程所做的更改

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM