2014-05-02 67 views
0

我對編程相當陌生,並且正在使用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 
+2

我不認爲你可以使用故事板OSX項目。有趣......哦......你不能...... – nhgrif

+0

你有哪些NSTextField動作連接到了你的IBAction方法?在你的IBAction方法中,'sender'將是觸發該動作的對象(NSTextField)。它也可以作爲self.box_a訪問,因爲這是您在Image Builder中綁定的屬性。您需要使用一種方法,例如'stringValue'方法來訪問NSTextField的內容。所以你可能需要'[self.coord setStringValue:[(NSTextField *)sender stringValue];' – Paulw11

回答

1

據我所知,我有最先進的的Xcode的最新版本,並沒有選擇創建一個OSX項目的故事板。故事板是針對iOS項目的。這就可以解釋爲什麼你無法將故事板中的任何東西與你的代碼掛鉤。

這並不是說故事板不能放在OSX項目中 - 它不能。但它不能從新文件的Cocoa部分中選擇創建 - 只有Cocoa Touch部分,這是iOS的東西 - 而不是OSX。

+1

我認爲OP是故事板和xib文件之間的混淆,意思是「Interface Builder」而不是故事板 – Paulw11

+0

@nhgrif對不起,他是^對,我的意思是界面生成器。 – user3587655

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) 
{ 
// ... 
} 
} 
0

你的問題比語法更帶有根本性,你需要去學習了關於各種事情以及它們的行爲方式,這些包括:變量,屬性,對象和對象引用。

簡要介紹爲什麼你會出錯:將一個物體想象成一個建築物。建築物內的「什麼」可能會隨着時間而改變,但建築物的地址(通常是!)不會。一個地址將你引向一座建築物,這就是對象引用的作用。

變量是一個包含某種類型值的框,該值可以隨時間變化,但框不會。

當你聲明:

NSTextField *input; 

您請求一個變量來爲您創建可容納對象的引用 - 它了保持物體比地址是一個建築,它只是告訴你在哪裏找到一個對象。

然後,當您將值分配給您的變量:

NSTextField *input = box_a; 

您正在請求box_a的的被複制並放置(存儲)在input。該值是對象引用,它是而不是的一個對象。無論如何,無論如何,這個陳述都不會改變box_a引用的任何對象 - 房子裏的東西沒有改變,你只需把房子的地址寫在其他地方。

當你然後做:

coord = input; 

你正在做同樣的事情 - 複製地址。沒有對象被改變。您所指的對象類型爲NSTextField,它們在屏幕上具有可視化表示,複製它們的地址不會改變該視覺表示,而是複製建築物的地址改變建築物中的內容。

當涉及到性能你的代碼表明一個財產,這是一段代碼做一些事情,而其後盾變量,這是一段代碼運行在一個變量之間的混淆。

瞭解這些概念至關重要。你需要進一步研究編程。

HTH