Связывание вызовов 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];
Другие вопросы по тегам