NSMutableDictionary消失了

时间:2016-02-09 09:36:27

标签: ios objective-c xcode7 viewcontroller nsmutabledictionary

我有这个奇怪的问题,在我的一个ViewControllers中,我像这样初始化我的字典:

- (void)viewDidLoad {
  [super viewDidLoad];
  profileData = [NSMutableDictionary dictionaryWithDictionary:@{@"userName":@"", 
                                                              @"userPhone":@"", 
                                                              @"userEmail":@"", 
                                                          @"userBirthDate":@""}];
}

它是用户配置文件视图控制器的一部分,它有一个保存按钮,带有此处理程序:

[editProfileRequest editProfileRequest:editProfileRequestResponse 
                              userName:profileData[@"userName"] 
                             userEmail:profileData[@"userEmail"] 
                                 phone:profileData[@"userPhone"]  
                         userBirthDate:profileData[@"userBirthDate"]    
                            userGender:@""];

如果首次安装并启动该应用,则每次用户点击保存时都会崩溃,因为所有键值对都会从profileData消失

在第一次发布之后的每次发布都一切正常,字典保存值。我有三重检查 - 根据第一次启动条件没有清除字典。我按以下方式为键指定值:

profileData[@"userName"] = profileContainer.userName;
...

XCode版本7.2,iOS 9.2.1 有没有人遇到过这个?讨厌这种黑魔法。

3 个答案:

答案 0 :(得分:0)

试试这个:

@property(strong,retain) NSMutableDictionay *profileData;


- (void)viewWillAppear {
    [super viewWillAppear];
    profileData = [NSMutableDictionary dictionaryWithDictionary:
    @{@"userName":@"", @"userPhone":@"", @"userEmail":@"",@"userBirthDate":@""}];
}

如果您不使用ARC,则可以提出保留。

[profileData retain];

希望这有效!!

答案 1 :(得分:0)

您正在使用便捷方法初始化字典,即您没有字典的所有权。如果您希望将其保留在alloc之外,则应init viewDidLoad

P.S。:是的,在这种特殊情况下,没有涉及 BLACK MAGIC

答案 2 :(得分:0)

在.h文件中指定NSMutableDictionary

@property(strong,retain) NSMutableDictionay *profileData;

并在.m文件中使用

 self.profileData = [[NSMutableDictionary alloc] initWithDictionary:
        @{@"userName":@"", @"userPhone":@"", @"userEmail":@"",@"userBirthDate":@""}];