Iphone 无法在另一个类中暂停并恢复nstimer
在第一类中定义myTimerIphone 无法在另一个类中暂停并恢复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
@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;
}
}
}