0

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

我正在 YouTube 上观看视频,试图让我继续前进。现在我已经切换到 Mac 应用程序,我想开始构建 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,我很想拥有它们。

4

2 回答 2

1

好的,让我们从简单的开始:

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

这些线路有两个问题。首先,Objective-C 中所有带有 a*的东西都是一个指针。当您比较时,==您是在比较指针的位置,而不是字符串的内容。你想isEqualToString:改用。

其次,在你的第二个if陈述中,你正在做一个作业。我还假设您不想检查@"t"两次?

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

你想看看UITextFieldDelegatetextField:shouldChangeCharactersInRange:replacementString:特别是。此外,可以在此处找到有关协议的一些信息。

最后,一些学习资源:
Treehouse
Apple 入门指南上的Objective-C 简介

于 2013-04-03T02:51:59.900 回答
0

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

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

于 2013-04-03T02:51:02.350 回答