我正在使用 RestKit .20 来映射两个对象。第二个对象依赖于第一个对象。所以第一个操作必须在第二个操作之前进行。操作完成后,控制器使用模型对象在表格视图中显示适当的信息。
第一个对象有一个唯一的 id,用于构成 url 请求的一部分,以获取附加到它的对象。它一切正常,请求正在获取信息并正确执行映射,但是操作的顺序都是错误的,我无法理解它!
这就是我想要发生的事情:
- View 加载并开始加载/映射第一个对象。
- 一旦第一个对象被加载,第二个对象就会被加载/映射。
- 表视图重新加载。
以下是会发生什么:
- 视图加载,加载表视图。
- 操作最后执行,每次执行块操作时都会重新加载数据 - 不是我想要的解决方案,但它是我让它工作的唯一方法。
我很难解释,所以这里有一些代码:(我省略了一些不相关的代码)
- (void)viewDidLoad
{
[super viewDidLoad];
[self loadFirstObjects];
//omitted code
}
- (void)loadFirstObjects {
//omitted code
[operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
self.pubRepos = mappingResult.array;
[self loadSecondaryObjects];
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"ERROR: %@", error);
}];
[operation start];
}
- (void)loadSecondObjects
{
for (FirstObject *firstObject in firstObjects) {
//Omitted code
[operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
SecondObject *secondObject = [mappingResult.array objectAtIndex:0];
[secondObjects setObject:secondObject forKey:secondObject.idNum];
[table reloadData];
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"ERROR: %@", error);
}];
[operation start];
}
}
那么我如何让这个以我想要的方式工作呢?我希望能够先执行请求/映射,然后将所有信息加载到表中并更新它。我需要不断地从 Web 服务重新加载/映射新数据,以便与重新加载表分开。
所以换句话说,这里最大的问题是:我如何准确控制操作块何时执行?