0

我正在尝试学习 iDevice 编程学习使用新的 3rd-party 库,该库将用于与项目的其他一些东西交互。唉,这个库的文档记录很差,而且我很难弄清楚一个示例程序是如何工作的(我团队关于它如何工作的两个主要理论是“巫毒”和“忍者魔法”)。

我一直在慢慢地将看起来像是核心功能一部分的部分(而不是为了使示例应用程序看起来专业而附加的所有花里胡哨的部分)复制到一个新项目中,并试图让它们工作. 现在我收到这个错误:*** 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,但这并没有解决问题。

4

3 回答 3

1

NSTimer类别添加到您的项目。是文件(添加NSTimer+Blocks.hNSTimer+Blocks.m)。

于 2012-10-30T18:22:22.963 回答
1

作为tc。指出,这是链接器的问题,不包括库的所有 NSTimer 部分。

解决方案是将-all_load标志添加到链接器。

于 2012-11-06T21:08:19.393 回答
0

好吧,从错误中可以看出 NSTimer 正在寻找这个选择器 [NSTimer timerWithTimeInterval:block:repeats:]

查看甚至不是一件事的文档,那么您使用的任何库都可能将该函数添加到 NSTimer 中吗?

在 NSTimer 上看起来相似的唯一现有函数是: [NSTimer timerWithTimeInterval: invocation: repeats:] [timerWithTimeInterval:target:selector:userInfo:repeats:]

如果您希望计时器调用 setCurrentTime 并且计时器在实现 setCurrentTime 的同一文件中初始化,您可以使用第二个,将目标设置为 self,并将选择器设置为 @selector(setCurrentTime:)

希望这可以帮助

于 2012-10-30T16:24:03.857 回答