如何从用户输入声明变量?

时间:2014-05-02 02:47:16

标签: objective-c macos

我对编程很新,并且正在使用Xcode 5中的Objective-C。 我现在在Xcode中使用Cramer规则制作OSX应用程序(这种矩阵数学方法用于计算三条线的交叉点)。

我真的需要这个概念的一些帮助 - 我需要能够从多个文本框中获取用户的输入(将它们全部分配给变量),将它们放入Cramer的规则,并通过标签提供答案。

我制作了故事板并将12个文本框中的一个(用于测试)分配为插座,将标签分配为插座,将按钮分配为动作,并尝试了几种不同的方式来接受用户输入并且(未经改动)通过标签将其反馈出去,所以在我进入数学之前我知道我正在使用什么,并且它没有成功。有重大的语法问题。

我在下面附上了我的代码:

//
//  NewClass.h
//  Cramer's Rule

#import <Foundation/Foundation.h>


@interface NewClass : NSViewController <NSTextFieldDelegate> {

IBOutlet NSTextField *box_a;
IBOutlet NSTextField *coord;
NSString *string;
}


@property (nonatomic, retain) IBOutlet NSTextField *box_a;
@property (nonatomic, retain) IBOutlet NSTextField *coord;


- (IBAction)calculate:(id)sender;

@end

//
//  NewClass.m
//  Cramer's Rule

#import "NewClass.h"

@implementation NewClass
@synthesize box_a;
@synthesize coord;


- (IBAction)calculate:(id)sender {

    NSTextField * input=box_a;
    coord =input;
}
@end

3 个答案:

答案 0 :(得分:1)

据我所知,我拥有最新版本的Xcode,并且没有为OSX项目创建故事板的选项。故事板适用于iOS项目。这就解释了为什么你无法将故事板上的任何东西挂钩到你的代码上的原因。

这并不是说故事板不能放在OSX项目中 - 它不能。但它无法从要创建的新文件的Cocoa部分中选择 - 只有Cocoa Touch部分,这是iOS的东西 - 而不是OSX。

答案 1 :(得分:1)

你必须使用NSTextFieldDelegate,它有像iOS中的回调方法:

- (void)textDidBeginEditing:(NSNotification *)notification;
- (void)textDidEndEditing:(NSNotification *)notification;
- (void)textDidChange:(NSNotification *)notification;
- (BOOL)acceptsFirstResponder;

例如:

- (void)textDidChange:(NSNotification *)notification{
if ([notification object]== box_a)
{
// ...
}else if ([notification object]== box_b)
{
// ...
}
}

答案 2 :(得分:0)

你的问题比语法更基础,你需要去研究各种事物以及它们的行为,包括:变量,属性,对象和对象引用。

简要介绍您出错的原因:将对象视为建筑物。什么是“在”建筑物可能会随着时间的推移而改变,但建筑物的地址(通常!)不会。地址将您引用到建筑物,这就是对象引用的作用。

变量是一个包含某种类型值的框,该值可以随时间变化,但该框不会。

宣布:

NSTextField *input;

您正在请求为您创建一个可以保存对象引用的变量 - 持有一个对象,而不是地址是一个建筑物,它只是告诉您在哪里找到一个对象。

然后为变量赋值:

NSTextField *input = box_a;

您要求box_a中的被复制并存放(存储)在input中。该值是对象引用,它是对象。无论box_a引用的是什么对象都没有被这个声明改变 - 房子里的东西不会改变,你只需把房子的地址写在别的地方。

然后你这样做:

coord = input;

你正在做同样的事情 - 复制地址。没有对象被改变。您引用的对象属于NSTextField类型,它们在屏幕上具有可视化表示,复制它们的地址不会改变该可视化表示,而不是复制建筑物的地址会改变建筑物中的内容。 / p>

当涉及到属性时,您的代码会在属性(它是一段执行某些操作的代码)与其支持变量之间产生混淆,这是一个变量,一段代码在运作。

理解这些概念至关重要。你需要进一步研究编程。

HTH