2012-04-26 4 views
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)" 
} 

Н файл properyty:

@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 
+0

Прежде всего, когда вы создаете/инициализируете свой объект myUser. можете ли вы просто NSLog (@ "% @", self.myUser.WeightMeasure); И мне не нравится, когда люди не следуют надлежащим правилам кода. Разве вы не думаете, что ваша переменная-член должна начинаться с маленькой буквы, ну, что не имеет значения. –

ответ

0

Использование valueForKey вместо objectForKey в этой строке:

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

так:

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

Вы также можете использовать, так как значения могут быть прочитаны как NSNumbers

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

И почему вы используете строки вместо поплавков? Разве это не облегчило бы вашу жизнь, когда вам нужно было бы выполнить некоторые сравнения?

Также проверьте, выделено ли вы память для «myUser», что может быть и так.

+0

Я выбираю строку, потому что «weight_measure» может быть «Kg» или «lbs», поэтому NSNumbers не имеет значения. Как я уже упомянул о другом ответе, измените «objectForKey» на «valueForKey», не решили мою проблему. – megimix

+0

Хорошо, тогда ответ очевиден. Вы не выделяете память для свойства myUser. Если вы используете его в подклассе UIViewController, добавьте его в ваш вызов -viewDidLoad: 'self.myUser = [[UserData alloc] init];' Если вы используете какой-либо другой тип класса, добавьте эту строку кода в свой вызов инициализации. – Eugene

+0

Отлично, ты прав. После выделения проблема решена. – megimix

0

Как уже упоминалось Евгений, вы должны использовать valueForKey вместо objectForKey

Другое дело, вы могли бы хотеть использовать свойство и точечную нотацию всякий раз, когда вы ссылаетесь членов ваших объектов, так как Apple, рекомендую. Обычно полезно управлять памятью.

Предыдущий ответ о не инициализации членов вашей строки в вашем -init() был совершенно неправильным, если это вызывает некоторую путаницу, я извиняюсь за это.

+0

Он ничего не меняет. Он просто указывает на строку ... – Alladinian

+0

Да, но поскольку она уже указывает на строку, которая равна @ "0", он не может указывать на другую строку. –

+0

Да, он может. Это целая точка указателей. Также нет таких методов, как valueOfKey и objectOfKey ... – Alladinian

Смежные вопросы