主线程看不到后台线程

时间:2016-04-06 18:30:49

标签: ios objective-c multithreading realm

我在主线程上尝试查看后台线程所做的更改时遇到了麻烦。

-(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指出来了!

谢谢!

1 个答案:

答案 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];