检查从NSURLConnection填充的自定义对象的NSMutableArray中是否完成



首先,非常感谢SO社区。我学到了很多。然而,对于目标C,我仍然是一个极端的新手,因此有一个问题。如果这是一个无知的问题,请提前道歉。

我已经对NSURLConnection进行了子类化,以便从web API中获取自定义对象(myObject)。每个对象需要对API进行2次调用才能完成。第一个调用是从我的对象列表中获取一个id属性。第二个调用是使用该id来构造不同的URL并填充其余的myObject属性。所有操作都很好,但我对重新加载tableViewsection based on a completion of all of themyObjectobjects within anNSMutableArray的方法的正确性有疑问。

以下是我在成功实例化和获取所有不完整的myObjects并将它们添加到NSMutableArray之后调用的方法。CCD_ 8是CCD_ 9的属性,其仅在针对CCD_。因此,我想用它来检查完整性。CCD_ 11是可变的并且包含所有不完整的CCD_。MyStoreClass就是这样。一个存储区,用于处理子类NSURLConnections的创建。

- (void)fetchDetails {
void (^completionBlock)(myObject *obj, NSError *err, int statusCode) = ^(myObject *obj, NSError *err, int statusCode) {
if (!err && statusCode == 200) {
NSArray *completionCheckArray = [arrayOfMyObjects filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"messageString = %@", [NSNull null]]];
if ([completionCheckArray count] == 0) {
[[self tableView] reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationAutomatic];
}

} else if (!err && statusCode != 200) {
[self statusCodeError:statusCode];
} else {
[self generalError:err];
}
};
for (myObject *mobj in arrayOfMyObjects) {
[[MyStoreClass sharedStore] fetchDetails:mobj withCompletion:completionBlock];
}
}

虽然这是有效的,但对我来说,必须为myObjects中的每一个创建一个通过完成块的数组似乎效率很低。如果是,检查所有myObjects的完成情况的替代方法是什么?

一种可能可行的方法是使用KVO(关键值观测)。查看相应的关键价值观察编程指南。

例如:如果你知道你期望从给定的服务调用中得到多少对象(即对象数),您可以在数组对象上挂接一个观察者,该观察者保存您的对象,并在添加元素时收到通知等等。有关插入/移除,请参阅观察NSMutableArray。

最新更新