gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 19:01:48 25 4
gpt4 key购买 nike

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 的值放入局部变量并将 that 的值传递给 Identity 对象是有效的:

NSString *tempUsername  = self.usernameTextField.text; 
self.identity.username = self.tempUsername;
self.identity.password = self.passwordTextField.text;

我不知道为什么会这样。我只能猜测,我所有的乱七八糟的事情都以某种方式在 Xcode 的缓存中的某个地方留下了一些旧引用的痕迹。

更有可能,我是个白痴。更好,我还在学习。

我应该使用 NSMutableString 吗?

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

有什么想法吗?

最佳答案

我真的不认为你的第二个解决方案真的解决了这个问题。可能是其他原因。

虽然管理器类拥有weak 引用确实是错误的。在 OOP 中,类,尤其是管理器应该拥有他们拥有的对象作为属性(property)。

因此您应该使用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;

关于ios - Xcode 让我使用临时变量...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24270061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com