新手到Objective-C ....
我有一个非常简单的.h文件:
@interface IdentityManager : NSObject
@property (nonatomic, weak) NSString *username;
@property (nonatomic, weak) NSString *password;
@property (nonatomic, weak) NSString *connString;
@property (nonatomic, weak) NSString *token;
@end
我想要需要从另一个对象的某些文本字段中获取文本以加载到Identity对象中:
self.identity.username = self.usernameTextField.text;
self.identity.password = self.passwordTextField.text;
是的,这是一个登录页面。问题是不会设置用户名。在数小时试图找出原因之后,我发现将 self.usernameTextField.text 的值放入局部变量并将 的值传递给Identity对象:
NSString *tempUsername = self.usernameTextField.text;
self.identity.username = self.tempUsername;
self.identity.password = self.passwordTextField.text;
我不知道为什么会这样。我只能猜测我所有的混乱都在某种程度上留下了Xcode缓存中的一些旧引用的痕迹。
更有可能的是,我是个白痴。更好,我还在学习。
我应该使用NSMutableString吗?
我认为类似的事情在其他地方再次发生。使用临时变量有助于实现我的目标。
有人想过吗?
答案 0 :(得分:4)
我真的不认为你的第二个解决方案确实解决了这个问题。它可能是别的东西。
虽然经理类有weak
引用是非常错误的。在OOP中,类,尤其是管理者应该拥有他们作为属性的对象。
因此,您应该使用strong
引用而不是weak
:
@property (nonatomic, strong) NSString *username;
此外,您不希望类外的任何更改来修改变量,因此您应该传递对象的副本:
NSString *username = self.usernameTextField.text;
self.identity.username = [username copy];
或者,您可以将属性声明为copy
而不是strong
,并且每次设置时都不必担心复制字符串。 (信用albertamg)
@property (nonatomic, copy) NSString *username;