0

データベースからデータを取得し、作成したオブジェクト (「ManejadorMateria」と呼ばれる) に保存しています。次に、このデータを次のビュー コントローラーのテーブル ビューに表示できるようにしたいと考えています。問題は、前のView Controllerのprepareforsegueメソッドでリクエスト操作を行う必要があり、オブジェクトManejadorMateriaに必要なデータが保存される前に、テーブルビューのcellForRowAtIndexPathメソッドが呼び出されることです。

メソッド cellForRowAtIndexPath がトリガーされる前にそのデータを取得するにはどうすればよいですか?

データベースへのリクエストを行うために、次のコードを使用しています。

-(void)commandWithParams:(NSMutableDictionary*)params onCompletion     (JSONResponseBlock)completionBlock
{
NSMutableURLRequest *apiRequest =
[self multipartFormRequestWithMethod:@"POST"
                                path:kAPIPath
                          parameters:params
           constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) {

           }];

AFJSONRequestOperation* operation = [[AFJSONRequestOperation alloc] initWithRequest:   apiRequest];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    //success!
    completionBlock(responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    //failure :(
    completionBlock([NSDictionary dictionaryWithObject:[error localizedDescription]   forKey:@"error"]);
}];

[operation start];
}

必要なデータを取得するには、次のコードを使用します。

- (void)cargarMateriasDeCarrera:(NSString *)carrera{

Materias = [[NSMutableArray alloc] init];
Manejador = [[ManejadorMateria alloc] init];

NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                               @"getMaterias", @"command",
                               carrera, @"carrera",
                               nil];


[[API sharedInstance] commandWithParams:params
                           onCompletion:^(NSDictionary *json) {
                               //handle the response
                               NSDictionary* res = [json objectForKey:@"result"];
                               Materia *materiafuente = [[Materia alloc]init];

                               for (id r in res) {
                                   materiafuente.Nombre = [NSString      stringWithFormat:@"%@",[r objectForKey:@"nombre"]];
                                   materiafuente.Codigo = [NSString stringWithFormat:@"%@",[r objectForKey:@"codigo"]];
                                   materiafuente.Descripcion = [NSString stringWithFormat:@"%@",[r objectForKey:@"descripcion"]];
                                   materiafuente.GradoDificultad = [r objectForKey:@"grado"];
                                   [Materias addObject:materiafuente];

                               }
                               [Manejador setMasterMateriasTodas:Materias];

                                }];


}

そして最後に、私が持っている同じView Controllerのprepareforsegueで:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

usuario.Carrera = [carreras objectAtIndex:self.tableView.indexPathForSelectedRow.row];
TablaMateriasViewController3 *tbvc3 = [segue destinationViewController];
tbvc3.usuario = usuario;


NSString *command = @"registraCarrera";
NSMutableDictionary *params =[NSMutableDictionary dictionaryWithObjectsAndKeys:
                              command, @"command",
                              usuario.Carnet, @"carnet",
                              usuario.Carrera, @"carrera",
                              nil];

[[API sharedInstance] commandWithParams:params
                           onCompletion:^(NSDictionary *json) {
                           }];
[self cargarMateriasDeCarrera:usuario.Carrera];
tbvc3.Manejador = Manejador;
}
4

1 に答える 1