你如何使(NSString *)文本与NSTimer一起使用?

时间:2012-05-02 23:53:05

标签: iphone string sdk nstimer

我不能使用pokeme:@“1”或pokeme:1或pokeme:“sdfsdfs”在NSTimer上。  我出现了错误。你是如何解决这个问题的?

- (void)Anything {

    [NSTimer scheduledTimerWithTimeInterval:06.00f target:self selector:@selector(Pokeme:@"1") userInfo:nil repeats:NO];
}

- (void)Pokeme:(NSString *)text {

}

4 个答案:

答案 0 :(得分:1)

您不能这样做 - 选择器只是方法的名称,该方法的参数将是计时器。您必须创建一个包含所需行为的新方法,并将 作为选择器传递或使用NSTimer+Blocks之类的内容。

答案 1 :(得分:1)

您没有正确调用选择器,也没有在-Pokeme上使用正确的参数:。

  1. 您需要使用@selector(Pokeme:)
  2. 调用选择器
  3. -PokeMe:需要以计时器为参数(我建议你再次阅读NSTimer docs)。
  4. 请务必使用userInfo在-Pokeme中传递您需要的任何数据:

答案 2 :(得分:0)

这不是一个有效的选择器。选择器只是方法签名方法的名称,你不能传递参数,因此你应该有

[NSTimer scheduledTimerWithTimeInterval:6.00f target:self selector:@selector(pokeMe:) userInfo:nil repeats:NO];

根据NSTimer文档,接收方法的签名应该不在形式

- (void)timerFireMethod:(NSTimer *)theTimer

所以你应该把你的方法定义为

- (void)pokeMe:(NSTimer *)timer;

如果要在userInfo参数中传递额外信息,请接受id类型,并且可以从timer对象中检索。

一个工作的例子是

[NSTimer scheduledTimerWithTimeInterval:06.00f target:self selector:@selector(pokeMe:) userInfo:@"I was passed" repeats:NO];

然后

- (void)pokeMe:(NSTimer *)timer;
{
    NSLog(@"%@", timer.userInfo);
}

#=> 2012-05-03 00:57:40.496 Example[3964:f803] I was passed

答案 3 :(得分:0)

请参阅NSTimer Class Reference

这不是传递变量的正确方法,实际上会抛出编译器。使用 userInfo 传递对象,然后您可以将该对象转换为NSString或任何您需要的对象。

/* INCORRECT */
[NSTimer scheduledTimerWithTimeInterval:06.00f target:self 
                        selector:@selector(Pokeme:@"1") userInfo:nil repeats:NO];

基本上,userInfo可以是一个对象:

的NSString

/* Pass @"1" as the userInfo object. */
[NSTimer scheduledTimerWithTimeInterval:6 target:self 
                           selector:@selector(Pokeme:) userInfo:@"1" repeats:NO];

/* Convert the object to NSString. */
-(void)Pokeme:(NSTimer*)timer {
    NSString *passedString = (NSString*)timer.userInfo;
}

的NSDictionary

/* Create an NSDictionary with 2 Key/Value objects. */
NSDictionary *passTheseKeys = [NSDictionary dictionaryWithObjectsAndKeys:
                                   @"Some String Value 1", @"StringKey1", 
                                   @"Some String Value 2", @"StringKey2", nil];

/* Pass the NSDictionary we created above. */
[NSTimer scheduledTimerWithTimeInterval:6 target:self 
                  selector:@selector(Pokeme:) userInfo:passTheseKeys repeats:NO];

/* Convert the timer object to NSDictionary and handle it in the usual way. */
- (void)Pokeme:(NSTimer*)timer {
    NSDictionary *passed = (NSDictionary *)[timer userInfo];
    NSString * objectString1 = [passed objectForKey:@"StringKey1"];
    NSString * objectString2 = [passed objectForKey:@"StringKey2"];
}