【问题标题】:How to save UITextField Text to NSString?如何将 UITextField 文本保存到 NSString?
【发布时间】:2013-09-29 10:41:53
【问题描述】:

在我的主视图控制器中,我有一个 UITextField,我正在尝试将输入到其中的文本保存到我的作业模型(类)中的 NSString。

家庭作业.h

#import <Foundation/Foundation.h>

@interface Homework : NSObject

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


@end

家庭作业.m

#import "Homework.h"

@implementation Homework

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

@end

在我的 assignmentViewController 中,我创建了一个 Homework 类型的对象,并尝试将其设置为等于按下保存按钮时输入到 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 打印出 className 为 (null)。谁能帮我弄清楚我做错了什么?这是我的第一个 iOS 应用(除了 Hello World)。

编辑:这是使用 ARC

编辑:我尝试更改
self.homeworkAssignment.className = self.ClassNameField.text;至 self.homeworkAssignment.className = @"TEST"; 并且日志仍然显示(Null)。

【问题讨论】:

  • 检查 ClassNameField 的属性定义。编辑器的左边距应该有一个小圆圈。如果该字段正确链接,圆的中心将有一个点。如果点不存在,则 ClassNameField 将为 nil。
  • @HotLicks - ClassNameField 链接正确
  • 如果 self.homeworkAssignment.className = @"TEST" 打印 null,homeworkAssignment 肯定是 nil

标签: ios objective-c uitextfield


【解决方案1】:

仔细检查您是否正确链接了ClassNameField 出口,并且您正在初始化homeworkAssignment。类似的东西。-

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

顺便说一句,你应该考虑为你的变量名使用 camelCase 符号:)

【讨论】:

  • ClassNameField 链接正确,这也是使用 ARC,所以我只是做了@synthesize homeworkAssignment = _homeworkAssignment;
  • 好吧,ARC 会为您提供release 对象,但并不意味着您不必alloc 他们。我敢打赌homeworkAssignmentnil,因为缺少alloc
【解决方案2】:

说实话,第一步总是很困难,但你应该以正确的方式学习它,呵呵

首先这样合成:

@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;

HomeWork.m

@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]];
}

因此,您直接使用两个 UITextField 给定的参数创建一个 newHomeWork 对象。

现在在您的日志消息中打印出来,看看发生了什么;)

【讨论】:

  • 感谢您的宝贵建议
  • 没问题,试着找出 initWith... 方法,它们将来会帮助你!顺便说一句,'self = [super init]' 是什么等等,稍后会出现!关于这件事的一本好书是:Objective-C For Absolute Beginners
猜你喜欢
  • 1970-01-01
  • 2011-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多