[英]@synthesize practice objective-c with user-interface
自1个小时以来,我在Objective-C上阻止了关于Setter / Getter的问题
我实现以下代码,以根据用户选择执行一些操作。
在我的视图控制器界面中:
@property NSString* view_test;
在我的实施中
@synthesize view_test;
使用此方法单击按钮后,用户可以访问其他视图
- (IBAction)PPBarButtonClick:(id)sender {
[self setView_test:@"test"];
NSLog(@"view_test %@", [self view_test]); // Print test
}
在我的viewDidLoad方法之后:
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"view_test %@", [self view_test]); // print always null
if ([[self view_test] isEqualToString:(@"test")]) {
//some action
} else {
// other action
}
}
还有我的踪迹
2016-04-04 07:44:43.266 MyApp[19926:675795] view_test (null)
2016-04-04 07:45:11.817 MyApp[19926:675795] view_test test
2016-04-04 07:45:11.925 MyApp[19926:675795] view_test (null)
我不明白为什么将“测试”设置为view_test后,打印返回(空)? 我迷路了
谢谢
应用此代码
- (IBAction)PPBarButtonClick:(id)sender {
// Print test
NSLog(@"view_test %@", [self view_test]); // print always null
if ([[self view_test] isEqualToString:(@"test")]) {
//some action
} else {
// other action
}
}
在我的viewDidLoad方法之后:
- (void)viewDidLoad
{
[super viewDidLoad];
[self setView_test:@"test"];
NSLog(@"view_test %@", [self view_test]);
}
您的代码看起来很陈旧,您需要更改代码中的许多内容,以使其现代化,并使调试更容易。
首先,声明这样的属性
@interface MyViewController: UIViewController
@property (nonatomic, strong) NSString *view_test;
@end
其次,您不再需要@synthesize
。 这些天唯一需要的时间是实现协议中声明的属性时。
第三,虽然您可以使用[myController view_text]
和[myController setView_text]
访问属性,但我不建议这样做。 我的规则是,如果将某物声明为属性,则应使用属性点表示法对其进行访问。 即myController.view_text
。 所以
NSString *text = myController.view_text;
myController.view_text = @"abc";
现在解决您的问题。 看到一个空值后跟'test'是有意义的,因为viewDidLoad
将在用户可用视图按下按钮之前被调用。 因此,您的if块将始终在viewDidload
调用else块。
没有什么明显的关于为什么在日志中第二个空值。 可能正在重新加载您的视图,或者其他原因将view_text设置为null。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.