Связывание вызовов API MKNetworkKit и проблемы с заполнением NSMutableArray данными
У меня есть UITableView с двумя разделами, где каждый раздел требует вызова REST API для данных. Я использую MKNetworkKit для звонков. Мой вопрос заключается в том, как я должен заполнить NSMutableArray для UITableView, чтобы гарантировать, что данные всегда верны, даже после "Подтянуть для обновления". Я просто чувствую, что все это происходит неправильно.
Это мой код на данный момент:
Подкласс MKNetworkEngine (.h):
typedef void (^DualResponseBlock)(id ResponseJson, NSError *);
-(MKNetworkOperation*) RequestWithURI:(NSString *) URI
withHandler:(DualResponseBlock)ResponseBlock;
Подкласс MKNetworkEngine (.m):
-(MKNetworkOperation *)RequestWithURI:(NSString *)URI
withHandler:(DualResponseBlock)ResponseBlock {
MKNetworkOperation *op = [self operationWithPath:HubAPI(URI)
params:nil
httpMethod:@"GET"];
if(![self isReachable]) {
DLog(@"Unable to connect to %@ - Reachability is %d", HubAPI(URI), [self isReachable]);
}
[op addCompletionHandler:^(MKNetworkOperation *completedOperation) {
[completedOperation responseJSONWithCompletionHandler:^(id jsonObject) {
ResponseBlock(jsonObject, nil);
}];
} errorHandler:^(MKNetworkOperation *errorOp, NSError *error) {
[errorOp responseJSONWithCompletionHandler:^(id jsonObject) {
NSMutableDictionary *errorDetails = [NSMutableDictionary dictionary];
NSDictionary *errorResponse = [jsonObject objectForKey:@"error"];
[errorDetails setValue:[errorResponse objectForKey:@"message"] forKey:NSLocalizedDescriptionKey];
NSError *error = [NSError errorWithDomain:kNSErrorDomain code:[[errorResponse objectForKey:@"code"] intValue] userInfo:errorDetails];
ResponseBlock(nil, error);
}];
}];
[self enqueueOperation:op];
return op;
}
ViewController с UITableView (.h):
@interface WishlistViewController : UITableViewController <NSObject, UITableViewDelegate, UITableViewDataSource, UIActionSheetDelegate> {
NSMutableArray *wishlist;
}
@property (nonatomic, retain) IBOutlet UITableView *wishlistTableView;
ViewController с UITableView (-(void)viewDidLoad) (.m):
[MBProgressHUD showHUDAddedTo:self.view animated:YES];
[app.hubEngine RequestWithURI:@"wishlist" withHandler:^(id responseJson, NSError *responseError) {
if(responseJson != nil) {
wishlist = [[NSMutableArray alloc] initWithObjects:[responseJson mutableCopy], nil];
[app.hubEngine RequestWithURI:@"wishlist/granted" withHandler:^(id responseJson, NSError *responseError) {
if(responseJson != nil) {
[wishlist addObject:[responseJson mutableCopy]];
[_wishlistTableView reloadData];
}
else {
DLog(@"Error: %@", [responseError localizedDescription]);
}
[MBProgressHUD hideHUDForView:self.view animated:YES];
}];
}
else {
DLog(@"Error: %@", [responseError localizedDescription]);
[MBProgressHUD hideHUDForView:self.view animated:YES];
}
}];
1 ответ
Не совсем уверен, что вы пытаетесь сделать здесь, но если вы хотите, чтобы вторая операция выполнялась после завершения первой, попробуйте это.
[op2 addDependency:op1];