2013-09-29 87 views
1

在我的主視圖控制器中,我有一個UITextField,我試圖將文本輸入保存到我的作業模型(類)中的NSString。如何將UITextField文本保存到NSString?

Homework.h

#import <Foundation/Foundation.h> 

@interface Homework : NSObject 

@property (nonatomic, strong) NSString *className; 
@property (nonatomic, strong) NSString *assignmentTitle; 


@end 

Homework.m

#import "Homework.h" 

@implementation Homework 

@synthesize className = _className; 
@synthesize assignmentTitle = _assignmentTitle; 

@end 

在我assignmentViewController,我創造型作業的對象,並嘗試將其設置爲無論是進入的的UITextField時按下保存按鈕。

分配視圖控制器

#import <UIKit/UIKit.h> 
#import "Homework.h" 

@interface Assignment : UIViewController { 


} 

@property(nonatomic) IBOutlet UITextField *ClassNameField; 
@property(nonatomic) IBOutlet UILabel *ClassNameLabel; 
@property (weak, nonatomic) IBOutlet UIButton *SaveButton; 

@property (nonatomic, strong) Homework *homeworkAssignment; 


- (IBAction)Save:(UIButton *)sender; 

@end 

AssignmentViewController.m

- (IBAction)Save:(UIButton *)sender { 

self.homeworkAssignment.className = self.ClassNameField.text; 
NSLog(@"SaveButtonPressed %@", self.homeworkAssignment.className); 

} 

的NSLog的打印出的是類名是(空)。任何人都可以幫我弄清楚我做錯了什麼?這是我的第一個iOS應用程序(除了Hello World)。

編輯:這是使用ARC

編輯:我試圖改變
self.homeworkAssignment.className = self.ClassNameField.text;至 self.homeworkAssignment.className = @「TEST」; 並且日誌仍然顯示(空)。

+0

檢查ClassNameField的屬性定義。編輯器左邊應該有一個小圓圈。如果該字段已正確鏈接,圓圈中心會有一個圓點。如果該點不存在,那麼ClassNameField將爲零。 –

+0

@HotLicks - ClassNameField鏈接正確 – Mike

+0

如果self.homeworkAssignment.className = @「TEST」輸出null,那麼'homeworkAssignment'肯定是'nil'。 – ssantos

回答

0

仔細檢查你的鏈接是否正確ClassNameFieldoutlet並且你正在初始化homeworkAssignment。東西like.-

self.homeworkAssignment = [[Homework alloc] init]; 

順便說一句,你應該考慮使用駝峯符號爲您的變量名:)

+0

ClassNameField鏈接正確,這也是使用ARC,所以我只做了@synthesize homeworkAssignment = _homeworkAssignment; – Mike

+0

那麼,ARC會爲你釋放對象,但並不意味着你不必「分配」它們。我敢打賭,由於'alloc'的缺失,'homeworkAssignment'是'nil'。 – ssantos

+0

你修正它的權利。非常感謝你 – Mike

0

嗯,老實說第一步總是很難,但你應該學會正確的方式,嘿嘿

首先合成的這種方式:

@synthesize labelAssignmentTitle,labelClassName; 

@synthesize labelAssignmentTitle; 
@synthesize labelClassName; 

沒有需要做到以下幾點:

@synthesize className = _className; 
@synthesize assignmentTitle = _assignmentTitle; 

現在,如果你從一開始初始化以正確的方式,你會發現人們更方便後來!

HomeWork.h

@interface HomeWork : NSObject 
@property (nonatomic, strong) NSString *className; 
@property (nonatomic, strong) NSString *assignmentTitle; 

-(id)initWithClassName:(NSString *)newClassName andAssignmentTitle:(NSString*)newAssigmentTitle; 

功課。米

@implementation HomeWork 
@synthesize assignmentTitle,className; 

-(id)initWithClassName:(NSString *)newClassName andAssignmentTitle:(NSString*)newAssigmentTitle { 
    self = [super init]; 
    if(self){ 
     assignmentTitle = newAssigmentTitle; 
     className = newClass; 

    } 
    return self; 
} 
@end 

ViewController.m

- (IBAction)saveIt:(id)sender { 
    HomeWork *newHomeWork = [[HomeWork alloc]initWithClassName:[labelClassName text]andAssignmentTitle:[labelAssignmentTitle text]]; 
} 

正因爲如此,你直接讓與你的兩個UITextFields給出的參數newHomeWork對象。

現在在您的logmessage中打印出來,看看發生了什麼;)

+0

謝謝你的好建議 – Mike

+0

沒問題,試圖找出initWith ...方法,他們會在未來幫助你! 順便說一句'self = [super init]'等等,會晚點來! 關於此問題的一本好書是:Objective-C For Absolute Beginners –

相關問題