2014-09-29 76 views
1

我正在使用在線API來檢索隨機的名言。在我的代碼中,我使用:多個iOS GET請求(動態請求數)

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urloftheapi] 
                  cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60]; 
    [request setHTTPMethod:@"GET"]; 


    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    [connection start]; 
    [connection release]; 

但是,我希望它可能拉多個報價。該API不包含多個引號的功能,因此我需要運行多個NSMutableURLRequest才能完成。但是,因爲它可能是1個請求,並且可能是幾個,所以我不確定在代碼中實現此操作的最佳方式。思考?

回答

1

根據API的設置方式,您可以執行一個請求來獲取引號列表(IE數組/字典的quoteID's等)。從那裏你可以遍歷你得到的所有quoteID,並做一個特定的請求來獲取引號ID屬性的每個引用。

沒有API的描述,幾乎不可能給你一個確切的答案,但我剛剛描述的是這些類型的問題的一般方法。

1)提出請求,以獲得報價(只是他們的主鍵/列表中唯一的ID)

2)遍歷從以前的請求中的所有ID和提出具體要求,以獲得通過的報價是什麼ID。

使用AFNetworking庫它看起來像這樣。請記住,請求是在不同的線程中處理的,因此您可能需要設置NSNotification來跟蹤您何時完成每個單獨的報價和/或跟蹤報價總數(外部循環)和當前個人引用你要求的(內部循環)。通過比較這兩個數字,你可以告訴你什麼時候結束。

NSMutableArray *allQuotes = [[NSMutableArray alloc] init]; 
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
NSString *url = @"www.whatever.com/api/quotes"; 
[manager GET:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSArray *quoteList = (NSArray *)responseObject; 
    for(NSString *quoteID in quoteList) 
    { 
     [manager GET:url parameters:@{@"quoteID":quoteID} success:^(AFHTTPRequestOperation *operation, id responseObject) { 
      [allQuotes addObject:responseObject]; 
      [NSNotificationCenter defaultCenter] postNotificationName:@"FINISHED_GETTING_QUOTE" object:allQuotes]; 
     } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
      //Handle failure here... 
     }]; 
    } 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    //Handle failure here... 
}]; 

-(void)finishedGettingQuotes:(NSNotification *)notification 
{ 
    if(currentRequest == totalRequests) 
    { 
     NSMutableArray *temp = notification.object; 
    } 
} 
+0

對不起,不張貼在OP的細節。該API只允許檢索每次調用一個隨機報價。我繼續建立一個循環來反覆運行該方法,基於將設置int次數的應用程序的一些其他細節。將所有返回的引號一起循環到一個數組或字符串中的最佳方法是什麼? – user717452 2014-09-29 16:28:25

+0

我會設置一個全局NSMutableArray作爲一個屬性。這可以在.h中通過添加「@property(nonatomic,strong)NSMutableArray * allQuotes」(不含引號obv)來完成。每當獲取報價的請求完成時,只需通過執行「[allQuotes addObject:newString]」將返回的NSString追加到該全局數組中「 – anders 2014-09-29 17:22:12

+0

在您的示例中,我將如何去告訴它多少次循環請求,說得到5個隨機報價? – user717452 2014-10-01 04:26:07