3

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

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

这是我在成功实例化并获取所有不完整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什么?

4

1 回答 1

2

一种可能且可行的方法是使用 KVO(Key Value Observing)。查看相应的Key-Value Observing Programming Guide

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

于 2012-12-03T18:39:38.510 回答