我今天刚开始使用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,我很乐意拥有它们。
答案 0 :(得分:1)
好的,让我们从容易的位开始:
if (qpass == @"t") {
if (qpass = @"t") {
[label setStringValue:@"Username and Password are valid."];
}
}
这些线路有两个问题。首先,Objective-C中*
的所有内容都是指针。与==
进行比较时,您正在比较指针的位置,而不是字符串的内容。您想要使用isEqualToString:
。
其次,在你的第二个if
声明中,你正在做一项任务。我还假设你不想两次检查@"t"
?
您必须单击其他位置,然后单击按钮。无论如何都要发送动作“onTextChange?”
您想要特别关注UITextFieldDelegate
和textField:shouldChangeCharactersInRange:replacementString:
。此外,可以找到有关协议的一些信息here。
最后,一些学习资源:
Introduction to Objective-C on Treehouse
Apple's Getting Started guide
答案 1 :(得分:0)
这些是您正在使用的引用对象,因此任何直接比较都会尝试比较它们的逻辑地址...... 几乎可以保证不起作用。严重的是,唯一可行的方法是如果两个变量都未初始化。正如所建议的那样,是“isEqual”方法。
此外,即使支持直接比较,'qpass = @“t”'也是一个赋值,它实际上可能会评估为真,因为它会评估qpass的地址。