首先,非常感谢SO社区。我学到了很多东西。但是,对于Objective C,我仍然是一个极端的新手,因此有一个问题。如果这是一个无知的问题,请提前道歉。
我已经将NSURLConnection
子类化为从我的Web API获取自定义对象(myObject
)。每个对象需要2次调用API才能完成。第一个调用是从我的对象列表中获取一个id属性。第二个调用是使用该id来构造不同的URL并填充myObject
属性的其余部分。一切都运行良好,但我对我重新加载tableViewsection based on a completion of all of the
myObject objects within an
NSMutableArray`的方法的正确性有疑问。
以下是我成功实例化并获取所有不完整的myObjects
并将其添加到NSMutableArray
后调用的方法。 messageString
是myObject
的属性,仅在myObject
的每个实例的第二次网络调用中可用/设置。因此,我想我会用它来检查完整性。 arrayOfMyObjects
是可变的,包含所有不完整的myObjects
。 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
完成的替代方法是什么?
答案 0 :(得分:2)
一种可行且可行的方法是采用KVO(Key Value Observing)。查看相应的Key-Value Observing Programming Guide。
例如:如果您知道您希望从给定的服务呼叫中有多少个对象(即对象计数), 您可以在持有对象的数组对象上挂接观察者,并在添加元素时收到通知。 请参阅Observing an NSMutableArray for insertion/removal。