Xcode让我使用临时变量......?

时间:2014-06-17 17:36:33

标签: ios objective-c

新手到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吗?

我认为类似的事情在其他地方再次发生。使用临时变量有助于实现我的目标。

有人想过吗?

1 个答案:

答案 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;