0

こんにちは私はiPhone開発に不慣れです。NSDictionaryから作成した通話のデータメンバーに移動データを追加しようとしています。「setWeightMeasure」を実行しても何も起こりませんでした。

助言がありますか?

動作しないコード:

NSDictionary *responseBodyProfile = [responseBody objectFromJSONString];
NSLog(@"%@",responseBodyProfile);
// the output is : 
"{ "profile": {"goal_weight_kg": "77.0000", "height_cm": "179.00", 
  "height_measure": "Cm", "last_weight_date_int": "15452", 
   "last_weight_kg": "99.0000", "weight_measure": "Kg" }}""

[responseBody release];

if (responseBodyProfile != nil ){
    NSDictionary *profile =[responseBodyProfile valueForKey:@"profile"];

    NSLog(@"%@\n",[profile objectForKey:@"weight_measure"]);// Output : "kg"

    [self.myUser setWeightMeasure:[profile objectForKey:@"weight_measure"]];
    NSLog(@"%@", [self.myUser WeightMeasure]); // Output : "(null)"
 }

Hファイルのプロパティ:

@property (nonatomic, retain) UserData* myUser;

UserData.h:

#import <Foundation/Foundation.h>

@interface UserData : NSObject{
    NSString* Weight;
    NSString* Height;
    NSString* GolWeight;
    NSString* WeightMeasure;

}

@property (nonatomic, retain) NSString* Weight;
@property (nonatomic, retain) NSString* Height;
@property (nonatomic, retain) NSString* GolWeight;
@property (nonatomic, retain) NSString* WeightMeasure; 

@end

UserData.m

#import "UserData.h"

@implementation UserData
@synthesize Weight, Height, GolWeight, WeightMeasure;

-(id)init{
    self.Weight = @"0";
    self.Height = @"0";
    self.GolWeight = @"0";
    self.WeightMeasure = @"0";
    return self;
}

-(void)dealloc{
    [Weight release];
    [Height release];
    [GolWeight release];   
    [WeightMeasure release];

    [super dealloc];
}

@end
4

2 に答える 2

0

この行では、objectForKeyの代わりにvalueForKeyを使用します。

[self.myUser setWeightMeasure:[profile objectForKey:@"weight_measure"]];

このような:

[self.myUser setWeightMeasure:[profile valueForKey:@"weight_measure"]];

値はNSNumbersとして読み取ることができるため、使用することもできます。

[self.myUser setWeightMeasure:[[profile valueForKey:@"weight_measure"] stringValue]];

そして、なぜフロートの代わりに文字列を使用するのですか?いくつかの比較を行う必要があるとき、それはあなたの人生を楽にしませんか?

また、「myUser」にメモリを割り当てているかどうかも確認してください。これも当てはまる可能性があります。

于 2012-04-26T19:14:31.803 に答える
0

Eugeneが述べたように、objectForKeyの代わりにvalueForKeyを使用する必要があります

もう1つは、Appleが推奨するように、オブジェクトメンバーを参照するときはいつでも、プロパティとドット表記を使用したい場合があるということです。一般的に、メモリを管理することは良いことです。

-init()で文字列メンバーを初期化しないという以前の回答は完全に間違っていました。混乱が生じる場合は、お詫び申し上げます。

于 2012-04-26T19:18:49.330 に答える