Iphone 无法在另一个类中暂停并恢复nstimer

Iphone 无法在另一个类中暂停并恢复nstimer,iphone,objective-c,cocoa-touch,ios6,Iphone,Objective C,Cocoa Touch,Ios6,在第一类中定义myTimer @property (nonatomic, retain) NSTimer *myTimer; @synthesize myTimer; - (void)viewDidLoad { myTimer = [NSTimer scheduledTimerWithTimeInterval:2.6 target:self selector:@select

在第一类中定义myTimer

 @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;

}
在mainviewcontroller.m中

@synthesize oneclass;
然后通过mainviewcontroller中的UI按钮暂停并恢复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; } } }
但是获取语义问题和弧语义问题的错误

未知接收器myTimer您是指NSTimer。选择器失效和激发的类方法未知


谢谢您的帮助。

myTimer是否设置为
ClassOne的属性

@property (nonatomic, strong) NSTimer *myTimer;


然后您可以调用
[oneClass.myTimer invalidate]
[oneClass.myTimer fire]在mainviewcontroller中。

当您从其他类调用timer时,您需要通过创建第一个类的对象来调用


或者,您可以从第二个类向第一个类发送通知,该通知将被观察,然后您所需的方法将被调用。

看起来您正在viewDidLoad方法调用中创建计时器对象。在尝试操作timer属性之前,请确保视图已实际加载,否则结果将不令人满意。此外,正如@Anoop Vaidya所说,您需要确保在尝试访问一类对象的属性之前初始化该类对象。执行此操作的一个好方法是通过以下方式修改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;
     }
   } 
}

myTimer设置为名为One的类中的属性。类名不是ClassOne,所以如果我定义@property(非原子,强)ClassOne*oneclass;在主视图中,控制器是对的还是错的?据我所知,它是对的。在这种情况下,您可以调用
[self.oneclass.myTimer invalidate]
[self.oneclass.myTimer fire]
。如果我像这样定义类this@property(非原子,强)一类*1类;它给出了错误未知类型名称Classoneif我以这种方式添加代码,然后得到错误[oneclass.myTimer invalidate];成员引用基类型不是结构或Union如果要从类2(甚至是类1的另一个实例)访问类1创建/拥有的任何对象,则必须以某种方式获取指向“拥有”该对象的类1实例的指针,并通过该指针.FWIW访问该对象,使用“类1”和“oneClass”等名称然后将对象命名为“一”或“一类”通常会非常混乱。尝试使用更具描述性的名称,你会发现它使生活更轻松,并帮助你诊断问题领域。看起来类“One”实际上是一个视图控制器,所以它可能应该命名为类似“timerPopupViewController”的名称。然后,在mainViewController中,您可以创建一个名为“timerPopup”的对象,该对象清楚地告诉您它是什么:)
@synthesize myTimer;
-(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;
     }
   } 
}