0

我正在使用 Xcode 为 iPhone 制作一个应用程序,我认为 Xcode 把我弄乱了......
我在ViewController.h

 @property (weak, nonatomic) IBOutlet UITextField *passwordField;

 @property (weak, nonatomic) IBOutlet UILabel *passwordResult;

 - (IBAction)go:(id)sender;

并在ViewController.m

- (void)viewDidLoad {

    A = @"A";

}

- (IBAction)go:(id)sender {

    password = [NSString stringWithFormat:@"%@", _passwordField.text];

    if (password == A) {
         _passwordResult.text = [NSString stringWithFormat:@"%@", A];
         }
   }

如果输入是大写“A”,这应该在我的标签上打印大写字母“A”,对吗?如果没有,我该怎么做?

注意:我不想只是复制输入的短语并打印它,我想制作一个密码破解应用程序只是为了看看它是否有效......

4

3 回答 3

0

代替:

if (password == A)

采用

if ([password isEqualToString:A])

否则,您只是在比较指针,而不是字符串本身的内容。

于 2013-01-17T03:31:17.853 回答
0

对于字符串比较,使用[someString isEqualToString:anotherString]

Using==将比较两个指针是否指向同一个对象,而不是它们是否指向具有相同内容的对象。即使两个指针都包含相同的字符串,但这并不意味着它们指向同一个对象。

如果两个人都拥有同一辆车,因此用相同的钥匙开锁,则两把钥匙不相等,不会同时打开两辆车;每个人只会打开制造它的汽车。如果一个人有一辆车,但有一把额外的钥匙,他们是平等的,因为他们打开的是同一辆车(物体)。你可以这样想指针。

于 2013-01-17T03:31:36.023 回答
0

isEqualToString正如 Rickay 和 trudyscousin 所指出的,你的平等测试不应该是==.

而且 - 正如 CodaFi 和 dreamlax 所暗示的那样,这条线:

 _passwordResult.text = [NSString stringWithFormat:@"%@", A];

包含一些冗余,因为 A 和 _passwordResult.text 都是 NSString,因此您不需要创建中间 NSString:

_passwordResult.text = A;

就足够了。

其他一些风格上的观察...

您大概已经在某处声明了您的 iVar “A”。我建议您像为 IBOutlets 所做的那样使用属性声明,并给它一个更好的名称。

@property (nonatomic, strong) NSString* aBetterNamedA

即使在对象内部,您也应该使用访问器语法:

self.aBetterNamedA
self.passwordResult.txt

(唯一的例外应该是你的initanddealloc方法,它应该直接针对 iVar)。

于 2013-01-17T03:53:42.693 回答