字符串比较和文本字段操作

时间:2013-04-03 02:44:45

标签: objective-c xcode cocoa xcode4

我今天刚开始使用Xcode来制作Cocoa应用程序。

我正在观看YouTube上的视频,试图让我继续前进。我现在开始构建Mac应用程序,因为我已经切换到了一个。我曾经在Windows上用.NET编程。

我正在创建一个小的“登录”窗口。在Xcode中,我在使用这个If语句时遇到了一些错误。这不是一个错误,但更像是一个警告。它工作正常,但我想确保我以正确的方式做到这一点。基本上它只是检查以确保用户名和密码字段中包含一些内容。

请记住,这是我生命中写过的第一个Objective-C代码。

#import "AppController.h"

@implementation AppController

NSString * quser = @"f";
NSString * qpass = @"f";

- (IBAction)checkforErrors:(id)sender {

        //the next couple of lines is where I'm getting the error msg...


        if (qpass == @"t") {
            if (qpass = @"t") {
            [label setStringValue:@"Username and Password are valid."];
            }
        }


}

- (IBAction)usernameEntered:(id)sender {

    quser = @"t";

}

- (IBAction)passwordEntered:(id)sender {

    qpass = @"t";

}

我甚至做变量的东西吗?我试图通过我的JavaScript和PHP知识帮助我完成这项工作(即使它们是完全不同的语言!!:P)。

我想问的另一件事。在Xcode中,它为我提供了在文本输入或输入后在文本字段上发送操作的选项。问题是,如果你输入一个密码然后单击按钮checkforErrors,它就不起作用了。您必须单击其他位置,然后单击按钮。无论如何都要发送动作“onTextChange?”

另外,如果你有足够的资源学习Objective-C / Cocoa,我很乐意拥有它们。

2 个答案:

答案 0 :(得分:1)

好的,让我们从容易的位开始:

    if (qpass == @"t") {
        if (qpass = @"t") {
        [label setStringValue:@"Username and Password are valid."];
        }
    }

这些线路有两个问题。首先,Objective-C中*的所有内容都是指针。与==进行比较时,您正在比较指针的位置,而不是字符串的内容。您想要使用isEqualToString:

其次,在你的第二个if声明中,你正在做一项任务。我还假设你不想两次检查@"t"

  
    

您必须单击其他位置,然后单击按钮。无论如何都要发送动作“onTextChange?”

  

您想要特别关注UITextFieldDelegatetextField:shouldChangeCharactersInRange:replacementString:。此外,可以找到有关协议的一些信息here

最后,一些学习资源:
Introduction to Objective-C on Treehouse
Apple's Getting Started guide

答案 1 :(得分:0)

这些是您正在使用的引用对象,因此任何直接比较都会尝试比较它们的逻辑地址...... 几乎可以保证不起作用。严重的是,唯一可行的方法是如果两个变量都未初始化。正如所建议的那样,是“isEqual”方法。

此外,即使支持直接比较,'qpass = @“t”'也是一个赋值,它实际上可能会评估为真,因为它会评估qpass的地址。