次のコードを使用して、ページングを使用して Instagram API コンテンツを読み取ろうとしています。FOR ループでは、メソッド loopData を呼び出して、ループごとに新しいページ ID を持つブロックでコンテンツを取得するつもりです。
...
for (int a = 1; a <= 3; a++)
{
NSLog(@"Loop count: %i", a);
[self loopData];
}
-(void)loopData
{
NSString *next;
next = [Globals sharedGlobalData].nextMaxId;
[client getUserMedia:[userTextField stringValue]
count:kCount
minId:-1
maxId:next
success:^(NSArray *media) {
[textView setString:[media description]];
NSLog(@"Next_Max_Id: %@ ", [Globals sharedGlobalData].nextMaxId);
}
failure:^(NSError *error, NSInteger statusCode) {
[self logError:@"media" error:error statusCode:statusCode];
}
];
}
私の問題は、ブロックが 3 回実行されることですが、すべてのループ サイクルで実行されるわけではありません。ブロックは for ループが終了した後に実行されます。したがって、新しいページ ID をブロックに渡すことはできません。
ログは次のようになります。 ループ 1 ループ 2 ループ 3
ブロックを介してコンテンツを読み取る ブロックを介してコンテンツを読み取る ブロックを介してコンテンツを読み取る
たくさんのアイデアありがとうございます!!
--- getUserMedia の実装
// Get a user's media
- (void)getUserMedia:(NSString*)userId // Can be 'self' for the current user
count:(int)count
minId:(int)minId // -1 for start
maxId:(int)maxId // -1 for no upper limit
success:(void (^)(NSArray* media))success
failure:(void (^)(NSError* error, NSInteger statusCode))failure {
// Setup the parameters
NSMutableDictionary* parameters = [NSMutableDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:count], @"count", nil];
if (minId > 0) [parameters setObject:[NSNumber numberWithInt:minId] forKey:@"minId"];
if (maxId > 0) [parameters setObject:[NSNumber numberWithInt:maxId] forKey:@"maxId"];
// Fire the get request
[self getPath:[NSString stringWithFormat:@"users/%@/media/recent", userId]
modelClass:[InstagramMedia class]
parameters:parameters
collection:success
single:nil
failure:failure];
}