我正在尝试学习iDevice编程和学习使用新的第三方库,该库将用于与项目的其他一些东西进行交互。唉,这个图书馆的文档很少,而且我很难弄清楚一个示例程序是如何工作的(我的团队关于它如何工作的两个主要理论是“伏都教”和“忍者魔法”)。
我一直在慢慢地复制看起来像是核心功能的一部分(而不是为了使示例应用程序看起来很专业的所有花边和口哨的一部分)进入一个新项目并尝试让他们工作。现在我收到此错误:*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSTimer timerWithTimeInterval:block:repeats:]: unrecognized selector sent to class 0x144e790'
我已经复制了原始文件中与计时器有关的所有内容,转载于此处:
@property (nonatomic) NSTimeInterval currentTime;
...
@synthesize currentTime;
// lots of other stuff that has nothing to do with Timers
-(void)setCurrentTime:(NSTimeInterval)time {
[self willChangeValueForKey:@"currentTime"];
currentTime = time;
[self didChangeValueForKey:@"currentTime"];
}
我需要添加哪个选择器?
编辑:
根据tc。的要求,我去了库中查找该方法,并在一个文件中找到了它:
#import <Foundation/Foundation.h>
/**
* A block based extension for NSTimer
*/
@interface NSTimer (EMAdditions)
/**
* Allows you set a block for execution when the timer fires.
* @param interval The time interval
* @param block The block to execute
* @param repeat A flag to indicate if the block should continuously repeat
*/
+(NSTimer *)timerWithTimeInterval:(NSTimeInterval)interval block:(void(^)(void))block repeats:(BOOL)repeat;
@end
我无法访问库的源代码(它只是一个很大的.a文件),但它不应该有这个方法的实现吗?我试着对这个文件进行#import,但这并没有解决问题。
答案 0 :(得分:1)
将NSTimer
类别添加到您的项目中。 Here是文件(添加NSTimer+Blocks.h
和NSTimer+Blocks.m
)。
答案 1 :(得分:1)
作为tc。指出,这是链接器的一个问题,不包括库的所有NSTimer部分。
解决方案是将-all_load
标志添加到链接器。
答案 2 :(得分:0)
好吧,NSTimer正在寻找这个选择器[NSTimer timerWithTimeInterval:block:重复:]
查看甚至不是文件的文档,您使用的库是否可能将该功能添加到NSTimer中?
在NSTimer上看起来类似的唯一现有函数是: [NSTimer timerWithTimeInterval:invocation:repeats:] [timerWithTimeInterval:目标:选择器:USERINFO:重复:]
如果你想让定时器调用setCurrentTime并在同一个实现setCurrentTime的文件中初始化定时器,你可以使用第二个,将target设置为self,并将selector设置为@selector(setCurrentTime:)
希望这有帮助