传递 NSTimer 有参数
Posted
技术标签:
【中文标题】传递 NSTimer 有参数【英文标题】:Passing NSTimer has parameter 【发布时间】:2013-02-28 06:07:02 【问题描述】:我有一个采用NSTimer
的方法,它的参数在A 类中
-(void)demoMethod:(NSTimer *)timer
//Do something!
现在我已经覆盖了该方法的测试用例:
-(void)testDemoMethodPassNilTimer
//Created class Instance for the ClassA
ClassA *testA = [[ClassA alloc]init];
//[test testDemoMethod:nil];
STAssertThrows([testA testDemoMethod:nil],@"should throw exception");
-(void)testDemoMethodPassTimer
ClassA *testA = [[ClassA alloc]init];
STAssertNoThrows([testA testDemoMethod:??????]);
为测试用例方法testDemoMethodPassTimer
传递NSTimer
对象的参数的正确方法应该是什么?
【问题讨论】:
是否要传递参数给 NSTimer 以在 demoMethod: 方法中访问? 【参考方案1】:给它一个实际的计时器对象,但不要将它安排在运行循环中。
【讨论】:
【参考方案2】:我也需要将参数解析为 NSTimer。所以我想出了创建类别类,这对我有帮助。
以下是在 NSTimer 上创建 Category 类的步骤。
-
右键单击项目并选择“新建文件”
Cacoa Touch > Objective-C 类别 > 下一步
给出类别:添加和类别:NSTimer
在 .h 文件中只需创建 placeId 的属性
在.m 中使用@dynamic 合成它并创建setter、getter
将该 .h 文件导入您的文件中。
NSTimer+additions.h 文件
#import <Foundation/Foundation.h>
@interface NSTimer (additions)
@property(nonatomic,retain) NSString *additionalTag;
@end
NSTimer+additions.m 文件
#import "NSTimer+additions.h"
#import <objc/runtime.h>
NSString *const additionalTagKey = @"additionalTagKey";
@implementation NSTimer (additions)
@dynamic additionalTag;
- (void)setAdditionalTag:(NSString*)aObject
objc_setAssociatedObject(self, additionalTagKey, aObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
- (NSString*)additionalTag
return objc_getAssociatedObject(self, additionalTagKey);
@end
现在 #import "NSTimer+additions.h"
在你的课堂上使用 NSTimer
将参数传递给 NSTimer
-(void)testDemoMethodPassTimer
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0f
target:self
selector:@selector(timerTick:)
userInfo:nil
repeats:YES];
timer.additionalTag = @"parameter passed to timer";
ClassA *testA = [[ClassA alloc]init];
STAssertNoThrows([testA testDemoMethod:timer]);
从计时器中检索参数
-(void)demoMethod:(NSTimer *)timer
NSLog(@"My Parameter: %@",timer.additionalTag);
涉及许多步骤,但希望对您有所帮助。 :)
【讨论】:
以上是关于传递 NSTimer 有参数的主要内容,如果未能解决你的问题,请参考以下文章
NSTimer 中的 UserInfo 没有传递正确的信息 - Swift