如何访问.m文件的属性到另一个.m文件?

时间:2014-01-30 04:25:58

标签: ios objective-c uibutton objective-c-category xctest

我上课ABCD.m,如下所示

**ABCD.m**
@property (nonatomic, strong) UIButton *button;
@property (nonatomic, strong) NSString *string;
- (void) firstMethod;
- (void) setTheButtonWithBool:(BOOL)var1 withString:(NSString *)var2;

-(void) firstMethod {
 // Alloc init button
 self.button.enabled = NO;
}

- (void) setTheButtonWithBool:(BOOL)var1 withString:(NSString *)var2  {
  self.button.enabled = var1;
  self.string = var2;
}

还有另一个类Test.m(XCTestCase的子类)来编写ABCD.m的单元测试用例

**Test.m** //Sub-class of XCTestCase

//Extension
@interface ABCD.m () 
 @property (nonatomic, strong) UIButton *button;
 @property (nonatomic, strong) NSString *string;
 - (void) firstMethod;
 - (void) setTheButtonWithBool:(BOOL)var1 withString:(NSString *)var2;
@end


@interace Test : XCTestCase

- (void)testSomeMethod {
 ABCD *abcd = [ABCD alloc] init];  
 BOOL *var1 = YES; 
 NSString *var2 = @"StackOverFlow";
 [abcd firstMethod]; 
 [abcd setTheButtonWithBool:var1 withString:var2];
 nslog(@"Result1 :%hhd", self.abcd.button.isEnabled);             -----
 nslog(@"Result2: %@", self.abcd.string);                         -----
 // Assert statement

}

输出:

结果1:否

结果2:StackOverFlow

当我设置属性'string'时,它被设置为'StackOverFlow'。但对于UIButton属性“按钮”,它没有设置为“否”。 为什么我不能设置UIButton的'enabled'属性,因为我可以从Test.m类设置ABCD.m的NSString

1 个答案:

答案 0 :(得分:0)

问题很简单。您永远不会在button实例上设置ABCD属性。没有代码可以创建UIButton并将其分配给button属性。

self.button.enabled = NO之类的通话已转换为[[self button] setEnabled:NO]。由于您尚未设置button,因此对[self button]的调用会返回nil。所以现在你在一个基本上是无操作的setEnabled:对象上调用nil

添加代码以创建按钮并设置button属性,其余代码将正常运行。