我不能使用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 {
}
答案 0 :(得分:1)
您不能这样做 - 选择器只是方法的名称,该方法的参数将是计时器。您必须创建一个包含所需行为的新方法,并将 作为选择器传递或使用NSTimer+Blocks之类的内容。
答案 1 :(得分:1)
您没有正确调用选择器,也没有在-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)
这不是传递变量的正确方法,实际上会抛出编译器。使用 userInfo
传递对象,然后您可以将该对象转换为NSString
或任何您需要的对象。
/* INCORRECT */
[NSTimer scheduledTimerWithTimeInterval:06.00f target:self
selector:@selector(Pokeme:@"1") userInfo:nil repeats:NO];
基本上,userInfo
可以是一个对象:
/* 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;
}
/* 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"];
}