1

使用以下代码,我尝试通过分页读取 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];
                 }
     ];
}

我的问题是,该块运行你的时间,但不是在每个循环周期。该块在 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];
}
4

1 回答 1

0

您传递给此方法的块是异步执行的。客户端发起异步网络请求,调用该方法后立即返回。一旦网络请求成功或失败,您传递给它的块之一就会被调用。这几乎是任何将块用于此类回调的 API 的标准行为。

我不完全确定你在块内尝试做什么nextID和诸如此类的事情,但你需要知道这一点:1)块不会在循环中运行,2)它们不会在任何保证的情况下运行命令。因此,无论您要解决什么问题,都需要牢记这一点。

希望这会有所帮助,如果您有任何问题,请告诉我。

于 2012-09-01T16:17:48.973 回答