2013-02-28 58 views
0

我有方法,采取NSTimer具有参数,它是在A级传递的NSTimer有参数

-(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:??????]); 
} 

应该是什么的正确方法为NSTimer传递参数用于测试的对象案例方法testDemoMethodPassTimer

+0

是否要将参数传递给NSTimer以访问demoMethod:方法? – 2013-02-28 06:36:45

+0

@Bhargavi是的! – Kiran 2013-02-28 09:04:09

回答

0

给它一个实际的计时器对象,但不要将它安排在运行循环中。

0

这也是我需要解析参数到NSTimer。所以我想出了创建类别班,这对我有帮助。

以下是通过NSTimer创建Category类的步骤。

  1. 右键单击项目,选择 “新建文件”
  2. Cacoa触摸>的Objective-C类>接下来
  3. 给范畴:补充&类别上:
  4. 中的NSTimer
  5. .h文件中只创建propertyId
  6. in .m使用@dynamic合成它&创建setter,getter
  7. 将.h文件导入到您的文件中。

的NSTimer +使用的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"在类

从计时器

-(void)demoMethod:(NSTimer *)timer{ 
    NSLog(@"My Parameter: %@",timer.additionalTag); 
} 

许多步骤都参与,但希望你有点帮助传递参数的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]); 
} 

检索参数。 :)