Установка значений свойств, которые не прилипают / viewDidLoad вызывается несколько раз в Xcode 4.3

Так что это странно.

У меня есть недвижимость:

@property (weak, nonatomic) Something *something; // .h
@synthesize something=_something                  // .m

По какой-то причине установка этого свойства не сохраняет _something установленным.

Я даже сеттер написал:

- (void)setSomething:(Something *)something {
    _something = something;
}

Переданный something является допустимым экземпляром объекта. Однако после перехода через строку _something = something, _something равно нулю, а something все еще является допустимым объектом.

Это сводит меня с ума, потому что мне все кажется правильным. Я писал то же самое тысячу раз. Единственное, что нового - это то, что это в Xcode 4.3.

Любая помощь будет оценена по достоинству. Спасибо!

ETA: Так, может быть, это намек? viewDidLoad вызывается много раз, партиями по 4. Я использую раскадровки, поэтому вид автоматически устанавливается правильно. Может быть, контроллер представления не загружается или не инициализируется должным образом или что-то в этом роде? У меня есть набор классов, и все выглядит так, как будто должно работать, но это не так.


person Tim Sullivan    schedule 19.02.2012    source источник
comment
Вам не нужно определять _something в интерфейсе с Xcode 4.2. Это делается автоматически.   -  person Tim Sullivan    schedule 20.02.2012
comment
Вы пробовали отправить _something NSLog сразу после того, как отметили это в задании? Это поможет решить между реальной проблемой и проблемой отладчика.   -  person Sergey Kalinichenko    schedule 20.02.2012
comment
Я сделал. Это ноль. Это то, что меня сводит с ума.   -  person Tim Sullivan    schedule 20.02.2012
comment
Я знаю, что это может не решить проблему, но попробуйте переименовать параметр, который вы передаете своему сеттеру, например, на somethingVal, например: - (void)setSomething:(Something *)somethingVal {_something=somethingVal;}   -  person Sergey Kalinichenko    schedule 20.02.2012


Ответы (2)


Хорошо, я разобрался. Я не уверен, откуда взялся этот метод, но это было в коде SomethingViewControler:

- (void)loadView {
    // If you create your views manually, you MUST override this method and use it to create your views.
    // If you use Interface Builder to create your views, then you must NOT override this method.
}

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

В любом случае, я надеюсь, что это кому-то поможет. Это убило только большую часть моего дня.

person Tim Sullivan    schedule 19.02.2012
comment
Отметьте это как ответ, чтобы будущие посетители могли быстро найти решение. В конце концов, подобное может случиться и с другими людьми. - person DarkDust; 20.02.2012
comment
О, да. Было очень неприятно раскомментировать (или переопределить) -(void)loadView по умолчанию. Метод взят из шаблона класса Xcode4.3 UIViewController. Я потратил 30 минут, чтобы выяснить, почему ^ & * # @!% ViewDidLoad был вызван 5 # @ ^! & Раз, и после этого представление все еще оставалось пустым. % ^ & * $! ЯБЛОКО. - person Matthias Bauch; 21.02.2012
comment
кстати, я зарегистрировал ошибку. Решение раскомментировать - (void) loadView, когда мы не используем Create XIB for User Interface, вообще не имеет смысла. Они представили раскадровки как новый способ делать что-то, поэтому не использовали xib. Поэтому они не должны заставлять меня удалять loadView каждый раз, когда я создаю viewController. Совершенно неожиданно оказалось, что этот метод действительно активен. Я потратил впустую почти час. - person Matthias Bauch; 21.02.2012
comment
DarkDust: Я отмечу это как ответ, как только SO позволит мне. Есть двухдневная блокировка, прежде чем я смогу это сделать. Я полагаю, что нужно платить за то, чтобы заменить людей, которые слишком рано отвечать на свои вопросы, комментариями о том, что люди должны отмечать ответ, когда они не могут. - person Tim Sullivan; 21.02.2012

Возможно, то, что вы назначаете этому свойству, больше нигде не указано. Таким образом, после назначения единственным указателем на этот объект является ваша собственность, и сейчас неделя, поэтому объект выбрасывается из кучи.

person Uko    schedule 19.02.2012
comment
Я пробовал сделать его прочным, но это тоже не решило проблемы. :-( Спасибо хоть. - person Tim Sullivan; 20.02.2012