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

时间:2013-01-17 03:17:11

标签: 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)viewDidLoad {

    A = @"A";

}

- (IBAction)go:(id)sender {

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

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

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

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

3 个答案:

答案 0 :(得分:0)

而不是:

if (password == A)

使用

if ([password isEqualToString:A])

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

答案 1 :(得分:0)

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

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

如果两个人都有同一辆车,并且有相同的钥匙来解锁它,两个钥匙都不相同,不会打开两辆车;每个人只会打开制作它的汽车。如果一个人有车但是有一把额外的钥匙,他们是相同的,因为他们打开同一辆车(物体)。你可以用这种方式思考指针。

答案 2 :(得分:0)

正如Rickay和trudyscousin指出的那样,您对平等的测试应该是isEqualToString而不是==

并且 - 正如CodaFi和dreamlax暗示的那样,这一行:

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

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

_passwordResult.text = A;

就足够了。

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

你可能已经在某个地方声明了你的iVar“A”。我建议您使用属性声明,就像您为IBOutlets所做的那样,并且还给它一个更好的名字。

@property (nonatomic, strong) NSString* aBetterNamedA

您甚至应该在对象中使用访问器语法:

self.aBetterNamedA
self.passwordResult.txt

(唯一的例外情况应该是您的initdealloc方法,这些方法应直接针对iVar。