0
-(void) httpDataDidFinishLoadingWithData:(NSData *)theData
{
    m_activityLoaded=NO;
    temp=[[NSString alloc] initWithData:[dataLoader httpData]
                               encoding:NSUTF8StringEncoding];
    NSLog(@"TEMP IS TEMP %@", temp);

    NSDictionary *dict = [[NSDictionary alloc]init];
    dict = [[temp JSONValue] objectForKey:@"location"];

    NSDictionary *dict1 = [[NSDictionary alloc]init];
    dict1 = [[temp JSONValue] objectForKey:@"wind"];


    NSDictionary *dict2 = [[NSDictionary alloc]init];
    dict2 = [dict1 objectForKey:@"direction"];

    NSDictionary *dict3 = [[NSDictionary alloc]init];
    dict3 = [[temp JSONValue] objectForKey:@"atmosphere"];

    NSDictionary *dict4 = [[NSDictionary alloc]init];
    dict4 = [[temp JSONValue] objectForKey:@"condition"];
    NSDictionary *dict5 = [[NSDictionary alloc]init];
    dict5 = [dict4 objectForKey:@"text"];
    NSDictionary *dict6 = [[NSDictionary alloc]init];
    dict6 = [dict4 objectForKey:@"code"];
    NSDictionary *dict7 = [[NSDictionary alloc]init];
    dict7 = [dict4 objectForKey:@"temperature"];

    temperatureLabel.text = [dict4 objectForKey:@"temperature"];
}

クラッシュはで発生しますtemperatureLabel.text = [dict4 objectForKey:@"temperature"];

私は男を知りません、データはコンソールに正確に印刷されますが、UILABEL(temperatureLabel)でクラッシュします。助けてください、事前に感謝します

4

3 に答える 3

4

あなたが得ているエラーを見ると、それはキーのオブジェクトリターンがまたはでtemperatureはなく、であることを示しています。NSStringNSDictionaryNSNumber

これを試してみてください:

-(void) httpDataDidFinishLoadingWithData:(NSData *)theData {
    m_activityLoaded=NO;
    temp=[[NSString alloc] initWithData:[dataLoader httpData]
                               encoding:NSUTF8StringEncoding];
    NSLog(@"TEMP IS TEMP %@", temp);

    NSDictionary *dict = [[temp JSONValue] objectForKey:@"location"];
    NSDictionary *dict1 =  [[temp JSONValue] objectForKey:@"wind"];
    NSDictionary *dict2 = [dict1 objectForKey:@"direction"];

    NSDictionary *dict3 = [[temp JSONValue] objectForKey:@"atmosphere"];
    NSDictionary *dict4 = [[temp JSONValue] objectForKey:@"condition"];
    NSDictionary *dict5 = [dict4 objectForKey:@"text"];
    NSDictionary *dict6 =  [dict4 objectForKey:@"code"];
    NSNumber *temperature = [dict4 objectForKey:@"temperature"];

    temperatureLabel.text = [NSString stringWithFormat:@"%@", temperature]; 
}

次のような温度でフォーマッターを確認することをお勧めしますNSNumberFormatter:°Fまたは°C。

于 2012-09-11T09:31:31.660 に答える
0

ディクショナリにNSNumberインスタンスが含まれていて、それをタイプのプロパティに割り当てていますNSString。クラッシュメッセージはそこからのヒントです。stringValueまたはその他の方法を使用して、数値のデータを文字列形式に変換します。

于 2012-09-11T09:32:02.020 に答える
0

オブジェクトがNSStringクラスであることを確認しますか?

次のようなものを入れてみてください:

if([[dict4 objectForKey:@"temperature"] isKindOfClass:[NSString class]])
   NSLog(@"lalala");

コンソールに記録されない場合は、オブジェクトがNSStringではないことを意味し、次のようなことを試すことができます。

temperatureLabel.text = [NSString stringWithFormat:@"%@", [dict4 objectForKey:@"temperature"]];

辞書に保存したオブジェクトの種類に応じて、%@を変更する必要があります。

于 2012-09-11T09:39:39.393 に答える