2013-09-22 5 views
2

У меня есть следующий код:ИОС - Ивар нуль внутри блока, хотя установлен перед выполнением блока

[GetUserData getUserDataWithBlock:^(UserData *userData, NSError *error) 
       { 
        self.userData = userData; 
       #1 self.userData.fbUser = user; 
        // Call REST API of server 'GetAllWords' 
        [GetAllWords getAllWordsWithBlock:^(NSSet *newWords, NSError *error) 
        { 
         [self saveAllWords:newWords]; 
        #2 [self showRootView]; 
        }]; 
       }]; 

Проблема заключается в том, что self.userData правильно установлен в # 1 (и не равно нулю), но когда я получаю до # 2 - self.userData становится null ... Пункт № 1 - это единственное место, где я установил self.userData.

+0

Здесь участвует GCD? Если да, укажите код для этого. – Unheilig

ответ

2

Я мог представить себе поведение, которое вы описываете, если свойство userData было определено как weak (особенно, если getAllWordsWithBlock работает асинхронно).

Если нет, то я бы предложить создание «смотреть» на базовой переменной:

  • заходящего контрольную точку в точке # 1 (и в точке № 2, предположительно) в коде и запуска приложение в отладчике;

  • когда отладчик останавливается при первом точки останова, добавить часы на переменную, примыкающим ваше userData свойство, щелкнув правой кнопкой мыши (или управления) на щелчок переменной в «Переменные» просмотр и выбор «Watch "(очевидно, этот снимок экрана является другой кусок кода, но он показывает, как создать„смотреть“в Xcode):

    add watch

  • докачку выполнение, нажав на кнопку продолжения: enter image description here

  • Когда вы нажмете на точку останова, иногда вы будете смотреть на ассемблер, но вы можете нажать кнопку «выйти» enter image description here, пока не дойдете до точки в своем коде, который вы узнаете.

Это может быть полезным в определении того, что меняется переменный (если не простая задача weak свойства).

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