2017-01-12 4 views
-1
// First VC prepareForSegue 
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([segue.identifier isEqualToString:@"your segue"]) 
    { 
     SecondVC *vc = (SecondVC *)segue.destinationViewController; 
     [SecondVC.timer startTimer:nil]; 
    } 
} 

// Create Property of NSTimer *timer 
// Second VC's Public Methods 
@interface SecondVC() 
{ 
    NSTimer *_timer; 
} 

- (void)_timerFired:(NSTimer *)timer; 
@end 

@implementation SecondVC 

- (IBAction)startTimer:(id)sender { 
    if (!_timer) { 
    _timer = [NSTimer scheduledTimerWithTimeInterval:1.0f 
             target:self 
            selector:@selector(_timerFired:) 
            userInfo:nil 
            repeats:YES]; 
    } 
} 

- (void)_timerFired:(NSTimer *)timer { 
    NSLog(@"Timer fired"); 
} 

Привет, Я хочу нажать кнопку в viewController (A), и это вызовет таймер в viewController (B). Это код, который у меня есть, однако я продолжаю получать "Property 'timer' not found on object of type secondVC " из этой строки. [SecondVC.timer startTimer:nil]; Спасибо, и я проверил, что оператор import для viewController (A) находится в viewController (B). Как мне разрешить эту ошибку?iOS: Объект не найден на объекте типа

+0

моего fiurst вопрос так же, как первый вопрос вашего компилятора: _where вашей собственности _ как '@property (неатомический, сильный) NSTimer * таймер; '? – holex

ответ

0

Попробуйте [vc startTimer:nil]; вместо [SecondVC.timer startTimer:nil]; и добавить метод startTimer: к интерфейсу SecondVC:

@interface SecondVC() 
{ 
    NSTimer *_timer; 
    - (IBAction)startTimer:(id)sender; 
} 
+0

Я получаю «Нет видимого @interface для SecondVC объявляет селектор startTimer» – john

+0

обновленные дополнения кода ... – Jake

0

Вы не используете объект UIViewController, чтобы получить доступ к таймеру, используйте [vc startTimer:nil]; вместо [SecondVC.timer startTimer:nil].

Обязательно введите - (IBAction)startTimer:(id)sender в свой файл заголовка (.h).

+0

Я получаю «Нет видимого @interface для SecondVC объявляет селектор startTimer» – john

+0

Взгляните на мое редактирование. – mattsson

-1

Прежде всего, вам нужно объявить IBAction в Interface (.h) из SecondVC

- (IBAction)startTimer:(id)sender; 

Затем вызовите метод экземпляра, а не от типа

[vc startTimer:nil]; 
+0

- (IBAction) в данный момент не требуется в интерфейсе. Он хочет запустить таймер, нажав кнопку в firstVc, а не на secondVc ... – Gulliva

+0

@Gulliva Нет, действие вызывается в secondVC от firstVC через segue, а линии дефляции в 'Interface' и' Implementation' должны совпадать , – vadian

-1

Поэтому я думаю, что ваш таймер не является видимым Свойством. Попробуйте установить

-(void)startTimer; 

в SecondViewController.h; Затем используйте в FirstVc.

SecondVC *vc = (SecondVC *)segue.destinationViewController; 
[vc startTimer]; 

В SceondVc написать это:

-(void)startTimer{ 
    _timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(_timerFired:) userInfo:nil repeats:YES]; 
} 
+0

Нет метода 'startTimer:' в 'NSTimer' – vadian

+0

@vadian Вы правы, я редактирую код извините. Было немного смущено ... – Gulliva

0
 // First VC prepareForSegue 
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
     { 
      if([segue.identifier isEqualToString:@"your segue"]) 
      { 
       SecondVC *vc = (SecondVC *)segue.destinationViewController; 
       [vc.timer startTimer:nil]; 
      } 
     } 

     //Add below line in second Vc 's .h file. 
    @property (nonatomic, strong) NSTimer *timer; 
    - (void)stopTimer:(id)sender; 
    - (void)timerFired:(NSTimer *)timer; 

     // Second VC's Public Methods 
     @interface SecondVC() 
     @end 

     @implementation SecondVC 

     - (void)startTimer:(id)sender { 
      if (!self.timer) { 
       self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0f 
                  target:self 
                 selector:@selector(timerFired:) 
                 userInfo:nil 
                 repeats:YES]; 
      } 
     } 

     - (IBAction)stopTimer:(id)sender { 
      if ([self.timer isValid]) { 
       [self.timer invalidate]; 
      } 
      self.timer = nil; 
     } 

     - (void)timerFired:(NSTimer *)timer { 
      NSLog(@"Timer fired"); 
     } 

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

  • Нет связанных вопросов^_^