Iphone 使用NSString一次确定一个输入字符?

Iphone 使用NSString一次确定一个输入字符?,iphone,objective-c,xcode,Iphone,Objective C,Xcode,我正在用Xcode为iPhone制作一个应用程序,我觉得Xcode把我搞砸了… 我在ViewController.h中有: @property (weak, nonatomic) IBOutlet UITextField *passwordField; @property (weak, nonatomic) IBOutlet UILabel *passwordResult; - (IBAction)go:(id)sender; 在ViewController.m中: - (void)

我正在用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”,对吗? 如果没有,我会怎么做

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

而不是:

if (password == A)
使用


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

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

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


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

正如Rickay和TrudysCounsin所指出的,你的相等性测试应该是
IsequalString
而不是
=

正如CodaFi和dreamlax所暗示的,这一行:

 _passwordResult.text = [NSString stringWithFormat:@"%@", A];
包含一些冗余,因为和_passwordResult.text都是NSString,所以您不需要创建中间NSString:

_passwordResult.text = A;
就够了

还有一些其他的风格观察

你大概在什么地方声明了你的iVar“A”。我建议您使用一个属性声明,就像您为您的IBOutlets所做的那样,并给它一个更好的名称

@property(非原子,强)NSString*aBetterNamedA

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

self.aBetterNamedA

self.passwordResult.txt


(唯一的例外应该是你的
init
dealloc
方法,它们应该直接处理iVar)。

噢,那些冗余的
+stringWithFormat:
调用的恐怖@CodaFi:我见过更糟的:
NSString*str=[[NSString alloc]initWithString:[NSString stringWithFormat:@“%@”,另一个str]]@dreamlax至少有4.6版会让你知道这一点。迫不及待地等待这些新的编译器警告发出。
_passwordResult.text = A;