Я являюсь довольно новым с целью c, и я пытаюсь передать аргумент ссылкой, но веду себя как она, было значение. Вы знаете, почему это не работает?
Это - функция:
- (void) checkRedColorText:(UILabel *)labelToChange {
NSComparisonResult startLaterThanEnd = [startDate compare:endDate];
if (startLaterThanEnd == NSOrderedDescending){
labelToChange.textColor = [UIColor redColor];
}
else{
labelToChange.textColor = [UIColor blackColor];
}
}
И это - вызов:
UILabel *startHourLabel; // This is properly initialized in other part of the code
[self checkRedColorText:startHourLabel];
Спасибо за помощь
В objective-c нет возможности передавать объекты по значению (если вы явно не скопируете его, но это уже другая история). Пощупайте свой код - вы уверены, что вызывается checkRedColorText:? А как насчет [startDate compare: endDate], он никогда не равен NSOrderedDescending? Значение labelToChange равно нулю?
Вот Возможные причины того, почему это не работает:
Вы утверждаете, что инициализировали startHourLabel где-то еще, но, если это метка из файла пера, вы не должны инициализировать его вообще. Он должен быть объявлен как IBOutlet и подключен к метке в пере с помощью конструктора интерфейсов.
Если это не метка в пере, т.е. вы намеренно создаете ее программно, вам необходимо проверить адрес метки, которую вы инициализируете, и проверить адрес метки, переданной в checkRedColorText. Либо NSLog его адрес при инициализации и в checkRedColorText, либо проверьте его с помощью отладчика.
Вы редактировали код между этой строкой
UILabel *startHourLabel;
и этой строкой?
[self checkRedColorText:startHourLabel];
Если нет, проблема в том, что вы: повторное объявление вашей переменной startHourLabel
, поэтому вы теряете любую инициализацию, которая была там ранее. Здесь вы должны получить ошибку компилятора.