2012-08-04 64 views
0

我剛剛使用this answer來設置Yahoo Finance的數據請求。如果您查看帖子,您會看到它會返回一個數據字典(本例中爲出價)和密鑰(符號)。只是爲了測試它,我用這個代碼,但它繼續崩潰:如何使用來自YQL庫存數據的JSON請求?

NSArray *tickerArray = [[NSArray alloc] initWithObjects:@"AAPL", nil]; 
NSDictionary *quotes = [self fetchQuotesFor:tickerArray]; 

NSLog(@"%@",[quotes valueForKey:@"AAPL"]); 

你能指出我做錯了什麼嗎?我需要得到一個包含我要求的符號數據的字符串。

請注意:我的代碼使用的是本文所基於的代碼,即this

+0

嘗試使用最少兩個代碼而不是一個。 – Rick 2012-08-10 07:40:58

回答

1

您喜歡的代碼對從API返回的JSON數據的形狀做出錯誤的假設,並且您得到了標準的KVC錯誤。 reason: '[<__NSCFString 0x7685930> valueForUndefinedKey:]: this class is not key value coding-compliant for the key BidRealtime.'

有了一些調試我得到它的工作...

根據您的輸入數組,並通過稍微修改的功能鏈接過多,你需要訪問該帖像這樣:

#define QUOTE_QUERY_PREFIX @"http://query.yahooapis.com/v1/public/yql?q=select%20symbol%2C%20BidRealtime%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(" 
#define QUOTE_QUERY_SUFFIX @")&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=" 

+ (NSDictionary *)fetchQuotesFor:(NSArray *)tickers { 
    NSMutableDictionary *quotes; 

    if (tickers && [tickers count] > 0) { 
    NSMutableString *query = [[NSMutableString alloc] init]; 
    [query appendString:QUOTE_QUERY_PREFIX]; 

    for (int i = 0; i < [tickers count]; i++) { 
     NSString *ticker = [tickers objectAtIndex:i]; 
     [query appendFormat:@"%%22%@%%22", ticker]; 
     if (i != [tickers count] - 1) [query appendString:@"%2C"]; 
    } 

    [query appendString:QUOTE_QUERY_SUFFIX]; 

    NSData *jsonData = [[NSString stringWithContentsOfURL:[NSURL URLWithString:query] encoding:NSUTF8StringEncoding error:nil] dataUsingEncoding:NSUTF8StringEncoding]; 
    NSDictionary *results = jsonData ? [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil] : nil; 

    NSDictionary *quoteEntry = [results valueForKeyPath:@"query.results.quote"]; 
    return quoteEntry; 
    } 
    return quotes; 
} 

你我會注意到我在這裏發佈的代碼和你鏈接的函數之間的差異是quoteEntry的最終解析。我使用了一些斷點來計算它在做什麼,特別是在所有例外情況下,這些都導致了我的確切路線。

+0

你的方法似乎是返回一個NULL對象數組。我使用的方法我得到了工作,但只是有時,所以我想用你的方式。你能告訴我一個使用這種方法的例子嗎? – 2012-08-16 16:23:55

+0

其實我覺得我能工作,謝謝! – 2012-08-16 16:37:16

0

所有你需要做的就是初始化NSMutableDictionary!

NSMutableDictionary * quotes = [[NSMutableDictionary alloc] init];

順便說一句,上面的人完全不使用引號字典。直接返回quoteEntry。跳過一步。 :)