2012-09-01 25 views
1

用下面的代碼我試圖用分頁讀取Instagram API內容。在FOR循環中,我打算調用方法loopData來獲取每個循環中都有一個新頁面標識的塊的內容。用於分頁的塊循環

...

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]; 
} 
+0

我期望任何採取成功或失敗塊來異步執行它們。 'getUserMedia:count:minId:maxId:success:failure:'看起來像什麼? –

+0

@CarlVeazey我試圖使用Instagram包裝[鏈接](github.com/stuartkhall/instagram),我發佈了上面的getUserMedia的實現。謝謝! – techcharger

回答

0

傳遞塊到這個方法的

---實現是異步執行的。客戶端啓動異步網絡請求,並在您調用此方法時立即返回。一旦網絡請求成功或失敗,就會調用您傳遞給它的其中一個塊。這幾乎是任何使用塊進行回調的API的標準行爲。

我並不完全確定你想要在nextID以及其他方面嘗試做什麼,但你需要知道這一點:1)塊不會在循環內運行,2)它們會沒有以任何保證順序運行。所以無論你想要解決什麼問題,你都需要牢記這一點。

希望這有助於,並讓我知道如果您有任何問題。

+0

謝謝@CarlVeazey!我想要做的是,用分頁閱讀網頁內容。 Instagram API只返回一組數據(例如用戶媒體),而下一組則需要用新的url(nextid)調用API。我對Objective-C非常陌生,現在我不知道如何處理這種情況。你知道一個正確的方式來加載分頁的網頁內容。只要這個值不爲null,意味着與新的nextid循環?提前謝謝了!! – techcharger

+0

你是否試圖做某種無休止的滾動的事情,你加載額外的頁面,因爲用戶滾動列表的末尾附近或什麼? '[Globals sharedGlobalData] .nextMaxId'也會自動增加值或其他東西?雖然,似乎數據會加載到maxID,因爲您傳遞的是-1 ...如果您正在對數據進行分頁,那麼您可能需要跟蹤下限以及不要獲取您不需要的信息。但我認爲你的用戶界面需求可能決定你的方法。 –

+0

謝謝@CarlVeazey!這個想法是完全通過所有頁面加載數據並將所有相關數據提取(JSON)到數組中以便進一步處理。全局變量'[Globals sharedGlobalData] .nextMaxId'存儲從每個頁面提取的nextid值,並將其傳遞給下一個url請求。有了這個值(nextid),我可以加載下一組數據。在這個時候,我正在測試一些方法來循環訪問每個循環中的新網址。你知道另一種方式來做到這一點嗎? – techcharger