Xcode 属性不保留值

Posted

技术标签:

【中文标题】Xcode 属性不保留值【英文标题】:Xcode Property Not Retaining Value 【发布时间】: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 【参考方案1】:

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

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

应该声明字符串

@property (nonatomic, strong) NSString *userName;

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

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

【讨论】:

以上是关于Xcode 属性不保留值的主要内容,如果未能解决你的问题,请参考以下文章

VB 6属性不保留值

选择了具有“保留(或强)”属性的属性进行综合

在 Xcode 4.3 中设置属性值不固定/viewDidLoad 被多次调用

Xcode 中 NSManagedObject 属性的默认值

将 PBR 模型导入 Xcode 会导致不正确的着色器属性

如何解决这个错误? “具有‘保留(或强)’属性的属性必须是对象类型”