日本語版のDBpediaのサイトから情報を取り出すために、API取得URLを書いています。

例えば、地球温暖化に関するWikipediaのページから関連する文字列(例:温室効果ガス)を取得したら、再度その関連する文字列についてクエリでの検索を行い、関連する文字列(温室効果ガスに関連する文字列)を取得する、またその関連する文字列についてクエリでの検索を行い、、、という繰り返し処理を行い、階層関係を考慮して配列に格納していきたいのです。

しかしながら、それがうまく実装することができません。。。
なんでも良いのでアドバイス、よろしくお願いいたします!!!

↓現在困っているのが、以下のプログラムの行のあたりで、

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject){

なぜか5回分のループを行いたいのに0からカウントを始めたいのに、いきなり3階層目,4階層目,と数字が飛んでカウントされてしまいます。

↓作成中のプログラム

__block NSString *topic = @"地球温暖化";
for(int layerNum=0; layerNum<5; layerNum++) {

    NSLog(@"%d回目の探索", layerNum+1);

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    [manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"application/json", @"sparql-results+json", @"text/json", @"text/html", @"text/xml", nil]];
    //NSLog(@"%d--------------", layerNum);
    //通信成功時の処理
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject){
        //NSLog(@"Response : %@", [operation responseString]);
        NSLog(@"----------------------------%d階層目 はじまり", layerNum+1);//なぞ

        NSData *json = responseObject;
        NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:json options:NSJSONReadingAllowFragments error:nil];
        //NSLog(@"output array : %@", [jsonDic description]);
        NSArray *bindings = [jsonDic st_arrayForPath:@"results.bindings"];


        NSLog(@"探索topic : %@", topic);

        NSMutableArray *mArray1 = [NSMutableArray array];

        [allValuesArray enumerateObjectsUsingBlock:^(NSString *valueString, NSUInteger idx, BOOL *stop) {
            NSLog(@"%lu: %@", (unsigned long)idx, valueString);//数字:値 がずらーっと出力される
            //ある層で選定キーワードが見つかった数mだけ配列をm個生成させる

            for (int j=0; j<[shouldLearnKeywords count]; j++) {

                if([valueString caseInsensitiveCompare:shouldLearnKeywords[j]] == NSOrderedSame){
                    NSLog(@" 同じのが見つかった: %d.%@", j, valueString);//選定キーワードが配列allValuesArrayから見つかったらはく
                    [mArray1 addObject:shouldLearnKeywords[j]];
                }
            }

        }];
        //取り出したキーワード
        NSInteger size = [mArray1 count];
        NSLog(@"取り出されたキーワードの数:%ld", size);
        for(int j=0; j<[mArray1 count]; j++){
            NSLog(@"%d階層 探索候補:%d %@", layerNum+1, j,mArray1[j]);
        }

        //取り出されたキーワードを選定した配列から削除
        [shouldLearnKeywords removeObjectsInArray:mArray1];
        NSInteger size1 = [shouldLearnKeywords count];
        NSLog(@"のこりのキーワードの数:%ld", size1);
        for(int j=0; j<[shouldLearnKeywords count]; j++){
            NSLog(@"残りのキーワード:%@",shouldLearnKeywords[j]);
        }

        NSLog(@"----------------------------%d階層目 おわり", layerNum+1);//なぞ
        //topic変更
        topic = shouldLearnKeywords[0];
        NSLog(@"topic : %@", topic);

        //通信失敗時の処理
    }failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Response %@", [operation responseString]);
        NSLog(@"Error : %@", error);
    }];
    [operation start];

}