【问题标题】:Xcode Property Not Retaining ValueXcode 属性不保留值
【发布时间】:2015-06-04 14:40:43
【问题描述】:

我有一个名为 LoginWindowViewController.h 的视图控制器,它声明了一个名为 usernameTextField 的属性:

@property (strong, nonatomic) IBOutlet UITextField *usernameTextField;

一个名为 James 的字符串与此 TextField 相关联。 然后我将另一个视图控制器 FirstViewController.h 导入到我的 LoginWindowViewController.m 中,我还将 LoginWindowViewController.h 导入到 FirstViewController.m 中。在我的 FirstViewController.h 中有一个名为 username 的属性。

@property (strong, nonatomic) IBOutlet NSString *userName;

然后我将 usernameTextField 分配给用户名(在我的 FirstViewController.m 中)。但是当我在我的 FirstViewController.m 中 NSlog 属性用户名时,它给出了一个空值。我该如何解决这个问题?

【问题讨论】:

  • 为什么 NSString` 是 IBOutlet?另外,不清楚“导入”的东西。你什么时候登录?您如何准确记录? IBOutlet 不应该是 weak 吗?
  • 不应该是可以从其他.m文件访问的IBOutlet吗?
  • 我用#import "header file" 来导入的。
  • 但是视图存在吗?你如何检查它的价值?我的猜测:你正在创建一个全新的对象。
  • 是的,两个视图控制器都存在,我们只是将一个属性从一个视图控制器导入到另一个视图控制器,但它不会保留它的值。例如,我们在一个视图控制器中为 usernameTextField 分配一个字符串,但是当我们将属性导入另一个视图控制器并使用 NSLog 记录它的字符串,值变为 null

标签: ios objective-c xcode properties nsstring


【解决方案1】:

当您导入类时,您实际上并没有导入任何值。当您设置属性的值时,它仅在该类的该实例上设置。您需要显式引用当前实例的属性以获取您设置的值。

注意:IBOutlet 代表 Interface Builder Outlet,它是您创建从情节提要或 xib 文件 UI 元素到类属性的链接的方式。因此,如果您没有链接到界面生成器中的某些内容,则无需使用 IBOutlet。

应该声明字符串

@property (nonatomic, strong) NSString *userName;

然后,当您从第一个视图控制器实例化您的登录视图控制器时,您可以像这样设置属性

LoginWindowViewController *loginVC = [[LoginWindowViewController alloc] init];
[loginVC.usernameTextField setText:self.userName];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-29
    • 2012-12-28
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    相关资源
    最近更新 更多