Objc等待REALM对象存在

时间:2018-03-20 07:24:12

标签: ios objective-c multithreading realm

我有一个在应用程序启动后运行的函数,它检索具有指定ID的领域对象并显示它。

问题是应用程序请求从API获取对象或REALM处于写入事务中。所以那个时候的对象是零。

问题是:如何创建一个等待REALM对象存在且具有指定ID的线程?

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用Realm通知:

https://realm.io/docs/objc/latest/#notifications

// This should be a field in your class:
RLMNotificationToken *token;

.............

__weak <<YourClass>> *weakSelf = self; // Create a weak reference to self to avoid a retain cycle
self.token = [realm addNotificationBlock:^(NSString *notification, RLMRealm realm)
{
    <<YourClass>> *strongSelf = weakSelf; // Create a strong reference to self to make sure it's still there
    Product *product = [Product objectInRealm:realm forPrimaryKey:<<primaryKey>>];
    if (product != nil)
    {
        // The product is present, do some action
        [strongSelf.token invalidate]; // Stop listening for changes
    }
}];

我编辑了更多细节的源代码。请注意我已经在浏览器中写了这个,所以它没有经过测试,我很长时间没有使用过Objective-C(最近只在Swift编写)。