Objective c 将数据从视图控制器传递到NSObject类

Objective c 将数据从视图控制器传递到NSObject类,objective-c,uitextfield,xcode7,nsobject,Objective C,Uitextfield,Xcode7,Nsobject,我知道如何将数据从一个视图控制器传递到另一个视图控制器,现在我想知道如何将textfield值从视图控制器传递到NSObject类,以及如何将接收到的数据存储在nstring中。请帮助我这样做,有人能举个例子吗,我认为您要问的是如何将数据存储在模型对象中以供视图控制器使用。如果这不是你的意思,那么请原谅我 您认为模型对象应该继承自NSObject。或者,还可以扩展另一个模型对象以添加特性值。模型对象是将视图对象与数据分离的好方法 假设您有一个带有一些客户字段的CustomerViewContro

我知道如何将数据从一个视图控制器传递到另一个视图控制器,现在我想知道如何将textfield值从视图控制器传递到NSObject类,以及如何将接收到的数据存储在nstring中。请帮助我这样做,有人能举个例子吗,

我认为您要问的是如何将数据存储在模型对象中以供视图控制器使用。如果这不是你的意思,那么请原谅我

您认为模型对象应该继承自
NSObject
。或者,还可以扩展另一个模型对象以添加特性值。模型对象是将视图对象与数据分离的好方法

假设您有一个带有一些客户字段的
CustomerViewController
。您需要填充这些客户字段,并可能对该数据执行一些处理。模型对象通过允许您将视图与任何与数据和业务规则相关的处理逻辑分离,从而支持这些关系

使用以下关系作为指导,您应该开始构建有效的视图控制器,将视图与数据分隔开来

自定义模型界面

@interface CustomerModel : NSObject

@property (strong, nonatomic) NSString *firstName, *lastName;
@property (strong, nonatomic) NSString *phoneNumber;

- (BOOL) isValidPhoneNumber:(NSString *)phoneNumber;

@end
客户模型实施

#import "CustomerModel.h"

@implementation CustomerModel

- (BOOL) isValidPhoneNumber:(NSString *)phoneNumber
{
    //Check that phone number can be parsed and is valid
}

@end
#import "CustomerViewController.h"
#import "CustomerModel.h"

@interface CustomerViewController () <UITextFieldDelegate>

@property (strong, nonatomic) CustomerModel *customerModel;
...
@property (weak, nonatomic) IBOutlet UITextField *firstNameField
...

@end


@implementation CustomerViewController

- (void) viewDidLoad {
    //Optionally instantiate the customer model with stored data,
    //  to pre-populate the view controller.

    self.customerModel = [CustomerModel new];

    self.firstNameField.delegate = self;
}

- (void) textFieldDidEndEditing:(UITextField *)textField {
    //Validate the phone number
    NSString *phoneNumber = textField.text;
    if ([self.customerModel isValidPhoneNumber:phoneNumber]) {
        self.customerModel.phoneNumber = phoneNumber;
    } else {
        //Alert the user that the data is invalid
    }

}

- (BOOL) textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}

@end
客户服务控制器实施

#import "CustomerModel.h"

@implementation CustomerModel

- (BOOL) isValidPhoneNumber:(NSString *)phoneNumber
{
    //Check that phone number can be parsed and is valid
}

@end
#import "CustomerViewController.h"
#import "CustomerModel.h"

@interface CustomerViewController () <UITextFieldDelegate>

@property (strong, nonatomic) CustomerModel *customerModel;
...
@property (weak, nonatomic) IBOutlet UITextField *firstNameField
...

@end


@implementation CustomerViewController

- (void) viewDidLoad {
    //Optionally instantiate the customer model with stored data,
    //  to pre-populate the view controller.

    self.customerModel = [CustomerModel new];

    self.firstNameField.delegate = self;
}

- (void) textFieldDidEndEditing:(UITextField *)textField {
    //Validate the phone number
    NSString *phoneNumber = textField.text;
    if ([self.customerModel isValidPhoneNumber:phoneNumber]) {
        self.customerModel.phoneNumber = phoneNumber;
    } else {
        //Alert the user that the data is invalid
    }

}

- (BOOL) textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}

@end
#导入“CustomerViewController.h”
#导入“CustomerModel.h”
@接口CustomServiceController()
@属性(强,非原子)CustomerModel*CustomerModel;
...
@属性(弱,非原子)IBOutlet UITextField*firstNameField
...
@结束
@实现CustomServiceController
-(无效)viewDidLoad{
//可选地使用存储的数据实例化客户模型,
//预填充视图控制器。
self.customerModel=[customerModel new];
self.firstNameField.delegate=self;
}
-(void)textfielddidediting:(UITextField*)textField{
//验证电话号码
NSString*phoneNumber=textField.text;
if([self.customerModel isValidPhoneNumber:phoneNumber]){
self.customerModel.phoneNumber=电话号码;
}否则{
//提醒用户数据无效
}
}
-(BOOL)textField应返回:(UITextField*)textField{
[textField resignFirstResponder];
返回YES;
}
@结束
可能的改进

  • 对用户来说,在填写信息时看到警报可能有点烦人。因此,最好将验证推迟到按下保存按钮时进行
  • 可以从数据存储中填充模型对象,以用于预填充表单

(我想你的意思是
NSObject
子类。)类是什么样子的,类的对象与控制器有什么关系?@Phillip Mills ya它是一个NSObject子类,在视图控制器中有一个文本字段,我只是将其传递到NSObject,然后我想在那里执行一些过程,我不明白是什么让你困惑。在子类的.h文件中创建一个
NSString
属性,并从视图控制器中设置该属性。控制器显然需要对对象的引用,但如何做到这一点取决于回答我的问题:“类的对象如何与控制器相关”。