Если вы использовали перо
Когда перо загружается и устанавливает все его соединения, оно ... (Из Руководства по программированию ресурсов )
ищет метод вида set
OutletName: и вызывает его, если такой метод присутствует
Следовательно, перо будет загружаться и вызывать setCurrentDate:
, передавая неархивированный UILabel
в качестве параметра
В вашем методе вы конфигурируете UILabel
, используя local ссылку, переданную в метод
[currentDate setText:[NSString stringWithFormat:@"On day: %d", onDay]];
Вы ни в коем случае не храните ссылку на этот UILabel
в иваре, поэтому технически вы утекли метку и, поскольку вы не установили ивар currentDate
, она будет инициализирована как nil
. Это опасность переопределения сеттера при неправильной реализации.
В какой-то момент в вашем методе вы должны установить свой ivar в переданную переменную. Обычный сеттер будет выглядеть так
- (void)setCurrentDate:(UILabel *)currentDate;
{
if (_currentDate != currentDate) {
[_currentDate release];
_currentDate = [currentDate retain];
}
}
Но
В вашем примере я бы вообще об этом не беспокоился, я бы вместо этого изменил
//need to reload the "on day" label now
[self setCurrentDate:self.currentDate];
что-то вроде
[self updateCurrentDate];
Реализация будет выглядеть примерно так:
- (void)updateCurrentDate;
{
NSInteger onDay = 1;
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"StartDate"]) {
onDay = [self daysToDate:[NSDate date]];
}
self.theCurrentNumberOfDaysSinceStart = onDay;
[self.currentDate setText:[NSString stringWithFormat:@"On day: %d", onDay]];
}