Как мне переместить блок кода в методе в целях «повышения эффективности»?

#iphone

#iPhone

Вопрос:

Я думаю, что у меня концептуальное недопонимание, и я был бы признателен за объяснение.

Внутри класса у меня был один и тот же блок кода, повторяющийся 3 раза (и работающий идеально), но чтобы попытаться сделать вещи более «эффективными», я извлек его и создал метод внутри класса следующим образом:

 - (void)dateUP {
NSLog(@"dateUp");
[UIView beginAnimations:@"datePicker" context:nil];
[UIView setAnimationDuration:0.5];

datePicker.transform = CGAffineTransformMakeTranslation(0,-310);
[UIView commitAnimations];
}
  

и затем там, где изначально был код, я помещаю:

 [self dateUp];
  

и я поместил следующее в свой файл .h:

 -(void)dateUp;
  

Я создаю и получаю это предупреждение:

 Line Location DetailPopUpView.m:165: warning: method definition for '-dateUp' 
not found
  

и сбой при этом в консоли (и, кстати, инструкция NSLog не отображается в консоли):

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '*** -[DetailPopUpView dateUp:]: unrecognized selector sent to instance
0x3d33ef0'
  

Приветствуется любая помощь. Одна вещь, которую я замечаю, это то, что сообщение консоли имеет dateUp: (с двоеточием), как будто ожидается параметр. Итак, хотя самое простое решение — просто вернуть код обратно, повторив его 3 раза, я хотел бы знать, что я делаю не так.

Спасибо.

Ответ №1:

Ваш метод:

 - (void)dateUP { ... }
  

Объявление вашего заголовка включает:

 -(void)dateUp;
  

Возможно, у вас орфографическая ошибка.

Комментарии:

1. Спасибо, Алекс. Это смущает. Совершенно верно. Мне нужно больше сна.

Ответ №2:

Похоже, у вас есть случаи, когда ваши селекторы (имена методов) не совпадают. dateUP отличается от dateUp , который сильно отличается от dateUp:

Это должно работать нормально:

 - (void)dateUp
{
    NSLog(@"dateUp");
    [UIView beginAnimations:@"datePicker" context:nil];
    [UIView setAnimationDuration:0.5];
    datePicker.transform = CGAffineTransformMakeTranslation(0,-310);
    [UIView commitAnimations];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self dateUp];
}