iOS UISwitch每4秒发送一次消息

时间:2016-06-04 03:51:03

标签: ios objective-c uiswitch

我有一个有uiswitch的聊天应用程序。如果“开关”按钮打开,我希望应用程序发送" hi"即使应用程序处于后台模式,也会每3秒连续一次。我知道我可以使用NSTimer,但我真的不知道如何在这段代码中实现它(这是我第一次开发iOS应用程序)。请帮帮我。

我的代码是:

// Switch action
//NSUInteger counter = 0;

- (void)changeSwitch:(id)sender{

    if([sender isOn]){
        for (int a=1; a<=300; a++)
        {
            //[self performSelector:@selector(changeSwitch:) withObject:_textField afterDelay:70.0];
            [sender setOn:YES animated:YES];
            [_textField setText:@"hi"];
            NSString * text = [_textField text];

            // Update status.

            [[TSNAppContext singleton] updateStatus:text];

            // Add the status to the bubble.
            [self appendLocalPeerTableViewCellWithMessage:text];

        }


       // NSLog(@"Switch is ON");
    } else{
        NSLog(@"Switch is OFF");
    }

}

{{1}}

现在,该应用程序正在显示所有&#34; hi&#34;毕竟300&#34; hi&#34;准备好了。但是我希望它能够一个接一个地发送它。

3 个答案:

答案 0 :(得分:1)

  1. 在视图控制器中定义NSTimer实例和计数器:

    @property (nonatomic, strong) NSTimer *timer;
    @property (nonatomic, assign) NSInteger counter;
    
  2. 在触发计时器时实施该方法:

    - (void)timerAction:(id)sender {
        [_textField setText:@"hi"];
        NSString * text = [_textField text];
    
        // Update status.
    
        [[TSNAppContext singleton] updateStatus:text];
    
        // Add the status to the bubble.
        [self appendLocalPeerTableViewCellWithMessage:text];
    
        // stop the timer after sending for 300 times
        self.counter += 1;
        if (self.counter >= 300) {
            [self.timer invalidate];
            self.timer = nil;
        }
    }
    
  3. 开关打开时启动计时器:

    - (void)changeSwitch:(id)sender{
        if ([sender isOn]) {
            self.counter = 0;
            self.timer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES];
        } else {
            // kill the timer when switch is off
            [self.timer invalidate];
            self.timer = nil;
        }
    }
    
  4. 但是,在您的应用程序进入后台后,您无法使计时器无限期地继续工作(除了一些例外:VoIP,GPS应用程序等)。请参阅官方文件Background Execution

答案 1 :(得分:0)

使用NSTimerDocumentation of NSTimer

NSTimer文件中声明.h的属性:

@property (retain,nonatomic) NSTimer *myTimer;

- (void)changeSwitch:(id)sender
{
   if([sender isOn]){
   myTimer = [NSTimer scheduledTimerWithTimeInterval: 4 target: self
                                   selector: @selector(AddMessage:) userInfo: nil repeats: YES];

   } else{
    [self.timer invalidate];
   }
}

每4秒后,计时器将调用以下功能:

-(void) AddMessage:(NSTimer*) timer 
{ 
    //Add Message
}

答案 2 :(得分:0)

//Nstimer *timer in .h

在你的UISwitch方法中写这样的

- (void)changeSwitch:(id)sender{

 if([sender isOn]){
timer=[NSTimer scheduledTimerWithTimeInterval:2.0
 target:self
 selector:@selector(targetMethod)
 userInfo:nil
 repeats:NO];
 }
else
{
    [timer invalidate];
}
}

targetMethod喜欢这个

-(void)targetMethod
 {
[sender setOn:YES animated:YES];
[_textField setText:@"hi"];
NSString * text = [_textField text];

// Update status.

[[TSNAppContext singleton] updateStatus:text];

// Add the status to the bubble.
[self appendLocalPeerTableViewCellWithMessage:text];

}