0

この回答を使用して、Yahoo Finance からのデータ要求を設定しました。投稿を見ると、データ (この場合は入札) とキー (シンボル) の辞書が返されていることがわかります。テストするために、次のコードを使用しましたが、引き続きクラッシュします。

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

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

私が間違っていることを指摘できますか?求めるシンボルのデータを含む文字列を取得する必要があります。

注意してください:私のコードは、この投稿が基づいていたコード、つまりthisを使用しています。

4

2 に答える 2

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。具体的には、正確な行につながるすべての例外で、いくつかのブレークポイントで何をしているかを調べました。

于 2012-08-12T13:41:50.983 に答える
0

NSMutableDictionary を初期化するだけです。

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

ところで、上の人は引用符辞書をまったく使用していません。まっすぐに quoteEntry を返します。1 つのステップをスキップします。:)

于 2013-09-07T17:48:49.757 に答える