我正在查询Parse端点News
,然后尝试将返回的对象转换为RLMOBject
子类对象NewsObject
,以便将它们保存到我的Realm DB中。< / p>
问题是,我的数据已正确获取并显示在tableview中,但是,newsObj
未创建! (此外,它后面的NSLog
语句永远不会执行。)
使这更加奇特;每当我回到上一个视图,然后重新访问这个视图时,newsObj
IS被实例化,NSLog
正常执行!!
另一方面,尝试甚至实例化defaultRealm
会产生类似的问题。
以下是我的完整代码的简化(同样已损坏)版本,在viewDidLoad
中运行。
//--- Query Parse for News entry ---
PFQuery *query = [PFQuery queryWithClassName:@"News"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
self.dataSourceArray = [[NSMutableArray alloc] initWithArray:objects];
[self.tableView reloadData];
//--- Create RLMObject NewsObject ---
NewsObject *newsObj = [NewsObject new];
NSLog(@"NewsObject Created");
}];
更新
原来发生了几起未抛出的错误。
1)不应在后台线程上创建/更新REALM对象。
2)对于这个PARSE后台线程,不会抛出REALM对象本身的任何错误。
我首先必须在主线程上调度创建NewsObject
,然后出现了有关在NSNumber
模型中使用RLMObject
属性的错误。我解决了这些问题,并使解决方案正常运行!
以下是我的代码现在的样子;
PFQuery *query = [PFQuery queryWithClassName:@"News"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
//--- Create RLMObject on Main Thread ---
dispatch_async(dispatch_get_main_queue(), ^{
NewsObject *newsObj = [NewsObject new];
NSLog(@"NewsObject Created");
self.dataSourceArray = [NewsObject allObjects];
[self.tableView reloadData];
});
}
}];