2016-02-09 3 views
-1

У меня есть эта странная проблема, в одном из моих ViewControllers я инициализировать мой словарь, как это:NSMutableDictionary исчезает

- (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

При каждом запуске после первого все работает нормально, словарь содержит значения. Я проверил triple - нет освобождения словаря на основе первого условия запуска. Поручаю свои значения для ключей следующим образом:

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

XCode версия 7.2, IOS 9.2.1 ли кто-нибудь столкнуться с этим? Ненавижу эту черную магию.

+0

весьма маловероятно, что черная магия ... Вы отладить и проверить, что код называется? вы уверены, что у вас есть только один экземпляр контроллера вида? – Wain

+1

какое сообщение об ошибке появляется при сбое приложения? –

+2

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

ответ

0

Попробуйте это:

@property(strong,retain) NSMutableDictionay *profileData; 


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

Если вы не используете ARC, чем вы можете приподнять сохранить.

[profileData retain]; 

Надеюсь, это сработает !!

+0

Не работает. Спасибо, в любом случае. –

+0

Вы используете ARC? – TechBee

+0

Да, пусть он включен, даже объявлен var с __strong. –

0

Вы инициализируете словарь с помощью удобного метода, т. Е. У вас нет права собственности на словарь. Вы должны allocinit его, если вы хотите сохранить его за пределами viewDidLoad.

P.S .: И, да, в данном конкретном случае нет BLACK MAGIC.

+0

Как возможно, что у меня нет права собственности на первый запуск, но есть ли он на каждом последующем? –

+0

Вы не являетесь его владельцем в обоих случаях. Он может работать или нет, потому что вы не создаете объект, он создается для вас, когда вы используете метод удобства. Вы являетесь владельцем объекта, когда вы 'alloc'' init' или 'copy' объекта. –

+0

Итак, кому это принадлежит? –

0

назначить NSMutableDictionary как в вашем файле .h

@property(strong,retain) NSMutableDictionay *profileData; 

и использования файлов .m

self.profileData = [[NSMutableDictionary alloc] initWithDictionary: 
     @{@"userName":@"", @"userPhone":@"", @"userEmail":@"",@"userBirthDate":@""}]; 
Смежные вопросы