2013-02-21 2 views
-1

Have MyTimer, определенного в классе OneБрус пауза и возобновление NSTimer в другом классе

@property (nonatomic, retain) NSTimer *myTimer; 

@synthesize myTimer; 

- (void)viewDidLoad { 

myTimer = [NSTimer scheduledTimerWithTimeInterval:2.6 
          target:self 
          selector:@selector(updateView:) 
          userInfo:nil 
          repeats:YES]; 

[super viewDidLoad]; 

} 

- (void)updateView:(NSTimer *)theTimer 
{ 
if (index < [textArray count]) 
{ 

    self.textView.text = [self.textArray objectAtIndex:index]; 
    self.imageView.image = [self.imagesArray objectAtIndex:index]; 
    index++; 
}else{ 

    index = 0; 

} 

Я хочу, чтобы приостановить и возобновить MyTimer в классе mainviewcontroller.

В mainviewcontroller.h

@property (nonatomic, strong) ClassOne *oneclass; 

и в mainviewcontroller.m

@synthesize oneclass; 

затем через UIButton в mainviewcontroller и возобновлять MyTimer

-(void)playpauseAction:(id)sender { 

if([audioPlayer isPlaying]) 
{ 
    [sender setImage:[UIImage imageNamed:@"music.png"] forState:UIControlStateNormal]; 

    [audioPlayer pause]; 

    [myTimer invalidate]; 


}else{ 

    [sender setImage:[UIImage imageNamed:@"audiostop.png"] forState:UIControlStateNormal]; 

    [audioPlayer play]; 

    [myTimer fire]; 

    if(isFirstTime == YES) 
    { 
     self.timer = [NSTimer scheduledTimerWithTimeInterval:06.0 
                 target:self 
                selector:@selector(displayviewsAction:) 
                userInfo:nil 
                repeats:NO]; 
     isFirstTime = NO; } } } 

Но получить семантическую проблему и ARC семантических ошибка выпуска

неизвестен приемник myTimer вы имели в виду NSTimer. Никакой известный метод класса для селектора недействителен и не срабатывает

Спасибо за помощь.

+0

Если вы хотите получить доступ к любому объекту, созданному/«принадлежит» классу Один из класса Two (или даже другой экземпляр класса One) , вы должны каким-то образом получить указатель на экземпляр класса One, который «владеет» объектом и получает доступ к объекту через этот указатель. –

+0

FWIW, используя имена типа «classOne» и «oneClass», а затем называя ваши объекты «один» или «один класс», как правило, очень запутан. Попробуйте использовать более описательные имена, и вы обнаружите, что это облегчает жизнь и помогает диагностировать проблемные области. Похоже, что класс «Один» на самом деле является контроллером представления, поэтому его, вероятно, следует назвать чем-то вроде «timerPopupViewController». Затем в вашем mainViewController вы можете создать объект с именем timerPopup, который четко сообщает вам, что это такое :) – JiuJitsuCoder

ответ

1

Является ли myTimer как собственность ClassOne?

@property (nonatomic, strong) NSTimer *myTimer; 

и

@synthesize myTimer; 

Тогда вы можете позвонить [oneClass.myTimer invalidate]; и [oneClass.myTimer fire]; в вашем mainviewcontroller.

+0

myTimer устанавливается как свойство в классе с именем One. имя класса - это только один не класс – user1452248

+0

, так что если я определяю @property (неатомный, сильный) ClassOne * oneclass; в mainviewcontroller правильно или неправильно – user1452248

+0

Правильно, насколько я могу судить. В этом случае вы можете вызвать '[self.oneclass.myTimer invalidate];' и '[self.oneclass.myTimer fire]'. –

0

Поскольку вы вызываете таймер из другого класса, вам нужно вызвать, создав объект первого класса.

Или вы можете отправить уведомление первому классу из второго класса, это уведомление будет соблюдаться, а затем будет вызываться требуемый метод.

1

Похоже, вы создаете объект таймера в вызове метода viewDidLoad. Убедитесь, что представление действительно загружено, прежде чем пытаться манипулировать свойством таймера, или результаты не будут приятными. Кроме того, как сказал @Anoop Vaidya, вам нужно убедиться, что вы инициализируете объект класса One, прежде чем пытаться получить доступ к его свойствам. Хороший способ сделать это, чтобы изменить код mainViewController следующим образом:

-(void)playpauseAction:(id)sender { 
    //This code assumes there is an ivar in mainViewController called aClassOneObject 
    if([audioPlayer isPlaying]) { 
    [sender setImage:[UIImage imageNamed:@"music.png"] forState:UIControlStateNormal]; 
    [audioPlayer pause]; 

    if (aClassOneObject) 
     [[aClassOneObject myTimer] invalidate]; 
    else 
     //Log error that the aClassOneObject was nil 

    } else { 
    [sender setImage:[UIImage imageNamed:@"audiostop.png"] 
      forState:UIControlStateNormal]; 

    [audioPlayer play]; 

    if (aClassOneObject) 
     [[aClassOneObject myTimer] fire]; 
    else 
     //Log error that the aClassOneObject was nil 

    if(isFirstTime == YES) { 
     self.timer = [NSTimer scheduledTimerWithTimeInterval:06.0 
                target:self 
                selector:@selector(displayviewsAction:) 
                userInfo:nil 
                repeats:NO]; 
     isFirstTime = NO; 
    } 
    } 
} 
Смежные вопросы