繁体   English   中英

@synthesize练习Objective-C与用户界面

[英]@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM