我有一个有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;准备好了。但是我希望它能够一个接一个地发送它。
答案 0 :(得分:1)
在视图控制器中定义NSTimer
实例和计数器:
@property (nonatomic, strong) NSTimer *timer;
@property (nonatomic, assign) NSInteger counter;
在触发计时器时实施该方法:
- (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;
}
}
开关打开时启动计时器:
- (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;
}
}
但是,在您的应用程序进入后台后,您无法使计时器无限期地继续工作(除了一些例外:VoIP,GPS应用程序等)。请参阅官方文件Background Execution。
答案 1 :(得分:0)
使用NSTimer
:Documentation 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];
}