-1

myTimerをクラス1で定義します

 @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クラスでmyTimerを一時停止および再開したいと思います。

mainviewcontroller.hで

@property (nonatomic, strong) ClassOne *oneclass;

およびmainviewcontroller.m

@synthesize oneclass;

次に、mainviewcontrollerのUIButtonを介して、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を意味しましたか。セレクターの既知のクラスメソッドは無効化して起動しません

手伝ってくれてありがとう。

4

3 に答える 3

1

myTimerはのプロパティとして設定されていますClassOneか?

@property (nonatomic, strong) NSTimer *myTimer;

@synthesize myTimer;

[oneClass.myTimer invalidate];次に、メインビューコントローラでとを呼び出すことができ[oneClass.myTimer fire];ます。

于 2013-02-21T17:03:42.653 に答える
1

viewDidLoad メソッド呼び出しでタイマー オブジェクトを作成しているようです。timer プロパティを操作する前に、ビューが実際にロードされていることを確認してください。そうしないと、満足のいく結果が得られません。また、@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;
     }
   } 
}
于 2013-02-21T17:20:50.303 に答える
0

他のクラスからタイマーを呼び出しているので、ファーストクラスのオブジェクトを作成して呼び出す必要があります。

または、2 番目のクラスから 1 番目のクラスに通知を送信できます。その通知は監視され、必要なメソッドが呼び出されます。

于 2013-02-21T17:05:27.933 に答える