2017-07-03 6 views
0

私はNSUserDefaultsからのユーザーの詳細を5つ以上のView Controllerに表示する必要があります。だから最初のビューコントローラviewDidLoadが呼び出されたときにサーバからユーザの詳細をロードするNSObjectサブクラスを作成しました。ここでObjective Cのプロパティメモリの問題

は私の最初のビューコントローラのviewDidLoad

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 


    // Getting the Current User Details 
    CurrentUserDetails *userDetails = [[CurrentUserDetails alloc]init]; 
    [userDetails initializeTheCurrentUserData]; 

//CurrentUserDetails is my NSObject class 

} 

そして

#import <Foundation/Foundation.h> 

@interface CurrentUserDetails : NSObject 

@property(strong,nonatomic) NSString *memberName; 
@property(strong,nonatomic) NSString *designation; 
@property(strong,nonatomic) NSString *memberType; 
@property(strong,nonatomic) NSString *entreprenuer; 

@property(strong,nonatomic) NSDate *expiryDate; 

@property(strong,nonatomic) NSData *imageData; 


- (void) initializeTheCurrentUserData; 

@end 

と実装

@implementation CurrentUserDetails 


- (void) initializeTheCurrentUserData{ 

    NSData *data = [[NSUserDefaults standardUserDefaults] valueForKey:@"userDictionary"]; 
    NSDictionary *retrievedDictionary = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

    self.memberName = [retrievedDictionary valueForKey:@"Name"]; 

    self.designation = [retrievedDictionary valueForKey:@"Designation"]; 

    self.memberType = [[retrievedDictionary valueForKey:@"Member_type"] stringValue]; 

    self.expiryDate = [retrievedDictionary valueForKey:@"Expiry"]; 
    self.kanaraEntreprenuer = [retrievedDictionary valueForKey:@"CityName"]; 

    NSString *imageUrl = [retrievedDictionary valueForKey:@"Member_image"]; 

    self.imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",[GlobalVariables getBaseURLForMemberImage],imageUrl]]]; 


} 

そして、IAMは、このような他のクラスから詳細を取るしようとしている..です

CurrentUserDetails *userDetails = [[CurrentUserDetails alloc]init]; 
    memberName = userDetails.memberName; 

    designation = userDetails.designation;  

    memberType = userDetails.memberType; 

    dateFromServer = userDetails.expiryDate; 
    entreprenuer = userDetails.entreprenuer; 
    imageDataFromServer = userDetails.imageData; 

値がゼロになりました。

しかし、毎回initializeTheCurrentUserDataメソッドを呼び出す場合は、正確な値を取得しています。プロパティーに値が割り当てられると、そのプロパティーをプログラム全体に使用できます。私は混乱しています。誰でもこのことについて教えてもらえますか?値を使用するたびにinitializeTheCurrentUserDataを呼び出す必要がありますか?

+0

いいえsetterとgetterメソッドを使用して保存できるサーバーレスポンスを再度初期化する必要はありません –

答えて

2

インスタンスのプロパティを設定すると、そのインスタンスのプロパティはそのまま残ります。しかし、あなたは[[CurrentUserDetails alloc] init]で新しいインスタンスを作成しています。新しいインスタンスはそれぞれデフォルト値(nilNSString)で初期化されます。

-initializeTheCurrentUserData-initと呼びます。したがって、各インスタンスはユーザーデフォルトの値で初期化されます。

@implementation CurrentUserDetails 

- (instancetype)init { 
    self = [super init]; 
    if (self != nil) { 
     [self initializeTheCurrentUserData]; 
    } 
    return self; 
} 

- (void)initializeTheCurrentUserData { 
    … 
} 
+0

ありがとうございました。 –

関連する問題