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 属性不保留值的主要内容,如果未能解决你的问题,请参考以下文章
在 Xcode 4.3 中设置属性值不固定/viewDidLoad 被多次调用