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

Objective c 如何从用户输入声明变量?,objective-c,macos,Objective C,Macos,我对编程相当陌生,并且在Xcode 5中使用Objective-C。 我目前正在Xcode中制作一个OSX应用程序,它使用Cramer规则(这种矩阵数学方法用于计算三条线的交点) 在这一概念上,我真的需要一些帮助——我需要能够从多个文本框中获取用户的输入(为它们分配一个变量),将它们放入cramer规则,并通过标签输出答案 我制作了故事板,将12个文本框中的一个(用于测试)指定为出口,将标签指定为出口,将按钮指定为动作,并尝试了几种不同的方法,仅获取用户输入,并(未更改)通过标签反馈,以便在我进

我对编程相当陌生,并且在Xcode 5中使用Objective-C。 我目前正在Xcode中制作一个OSX应用程序,它使用Cramer规则(这种矩阵数学方法用于计算三条线的交点)

在这一概念上,我真的需要一些帮助——我需要能够从多个文本框中获取用户的输入(为它们分配一个变量),将它们放入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

据我所知,我有最新版本的Xcode,没有为OSX项目创建情节提要的选项。故事板用于iOS项目。这就解释了为什么你不能把故事板上的任何东西连接到你的代码上


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

您必须使用
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)
{
// ...
}
}

你的问题比句法更基本,你需要去研究各种事物是什么,它们是如何表现的,这包括:变量、属性、对象和对象引用

要简单介绍出错的原因,请将对象想象为建筑。建筑物内的东西可能会随着时间的推移而改变,但建筑物的地址(通常!)不会改变。地址指代建筑物,对象引用就是这样做的

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

当您声明:

NSTextField *input;
您正在请求为您创建一个变量,该变量可以保存对对象的引用-它不会保存对象,就像地址是建筑一样,它只告诉您在哪里可以找到对象

然后为变量赋值时:

NSTextField *input = box_a;
您正在请求将
框中的值复制并放置(存储)在
输入中。该值是对象引用,它不是对象。无论
box\u a
引用了什么对象,这句话都不会改变它——房子里的东西不会改变,你只要把房子的地址写在别的地方就行了

当你这样做时:

coord = input;
你也在做同样的事情——复制地址。没有对象被改变。您所指的对象类型为
NSTextField
,它们在屏幕上具有可视表示,复制它们的地址不会改变该可视表示,就像复制建筑物的地址会改变建筑物中的内容一样

当涉及到属性时,您的代码建议混淆属性(做某事的代码片段)和它的支持变量(代码片段操作的变量)

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


HTH

我认为OSX项目不能使用故事板。有趣。。。哦您无法…您已将哪个NSTextField操作连接到iAction方法?在iAction方法中,
sender
将是触发该操作的对象(NSTextField)。它还可以作为self.box_a访问,因为这是您在Image Builder中绑定的属性。您需要使用a方法,例如
stringValue
方法来访问NSTextField的内容。因此,您可能需要
[self.coord setStringValue:[(NSTextField*)sender stringValue];
我假定OP在故事板和xib文件之间混淆了,它的意思是“接口生成器”,而不是storyboard@nhgrif对不起,他是对的,我是说界面生成器。
coord = input;