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

时间:2016-05-22 17:50:25

标签: objective-c uitextfield xcode7 nsobject

我知道如何将数据从一个视图控制器传递到另一个视图控制器,现在我想知道如何将视图控制器中的文本字段值传递给NSObject类以及如何将收到的文件存储在nstring中。请帮我做这个,任何人都可以举一个例子,

1 个答案:

答案 0 :(得分:1)

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

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

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

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

CustomModel界面

@interface CustomerModel : NSObject

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

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

@end

CustomerModel实施

#import "CustomerModel.h"

@implementation CustomerModel

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

@end

CustomerViewController实施

#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

可能的改进

  • 用户可能会有点恼火,在填写信息时查看提醒。因此,最好将验证推迟到按下保存按钮时。
  • 可以从数据存储中填充模型对象,以用于预填充表单。