为了账号安全,请及时绑定邮箱和手机立即绑定

在视图控制器之间传递数据

在视图控制器之间传递数据

iOS
泛舟湖上清波郎朗 2019-05-20 16:29:02
我是iOS和Objective-C以及整个MVC范例的新手,我坚持以下内容:我有一个视图作为数据输入表单,我想让用户选择多个产品。产品列在另一个带有a的视图中,UITableViewController我启用了多个选择。我的问题是,如何将数据从一个视图传输到另一个视图?我将UITableView在数组中保留选择,但是如何将其传递回上一个数据输入表单视图,以便在提交表单时将其与其他数据一起保存到Core Data?我已经四处浏览并看到一些人在app delegate中声明了一个数组。我读了一些关于单身人士的事情,但不明白这些是什么,我读了一些关于创建数据模型的内容。执行此操作的正确方法是什么?我将如何进行此操作?
查看完整描述

4 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

MVC中的M用于“模型”,而在MVC范例中,模型类的作用是管理程序的数据。模型与视图相反 - 视图知道如何显示数据,但它不知道如何处理数据,而模型知道如何处理数据的所有内容,但不了解如何显示数据。模型可能很复杂,但它们不一定是 - 您的应用程序的模型可能像字符串或字典数组一样简单。

控制器的作用是在视图和模型之间进行调解。因此,它们需要引用一个或多个视图对象和一个或多个模型对象。假设您的模型是一个字典数组,每个字典代表表中的一行。应用程序的根视图显示该表,它可能负责从文件加载数组。当用户决定向表中添加新行时,他们会点击一些按钮,您的控制器会创建一个新的(可变的)字典并将其添加到数组中。为了填充行,控制器创建一个详细视图控制器并为其提供新的字典。详细视图控制器填写字典并返回。字典已经是模型的一部分,因此没有其他任何事情需要发生。


查看完整回答
反对 回复 2019-05-20
?
智慧大石

TA贡献1946条经验 获得超3个赞

有多种方法可以将数据接收到iOS中的不同类。例如 -

  1. 分配另一个类后直接初始化。

  2. 委派 - 用于传回数据

  3. 通知 - 用于一次向多个类广播数据

  4. 保存NSUserDefaults- 以便稍后访问

  5. 单身人士课程

  6. 数据库和其他存储机制,如plist等。

但是对于将值传递给在当前类中完成分配的其他类的简单方案,最常见和首选的方法是在分配后直接设置值。这样做如下: -

我们可以使用两个控制器来理解它 - Controller1和Controller2

假设在Controller1类中,您要创建Controller2对象并使用传递的String值推送它。这可以这样做: -

- (void)pushToController2 {

    Controller2 *obj = [[Controller2 alloc] initWithNib:@"Controller2" bundle:nil];
    [obj passValue:@"String"];
    [self pushViewController:obj animated:YES];}

在Controller2类的实现中,将有以下功能 -

@interface Controller2  : NSObject@property (nonatomic , strong) NSString* stringPassed;@end@implementation Controller2
@synthesize stringPassed = _stringPassed;- (void) passValue:(NSString *)value {

    _stringPassed = value; //or self.stringPassed = value}@end

您也可以使用与此类似的方式直接设置Controller2类的属性:

- (void)pushToController2 {

    Controller2 *obj = [[Controller2 alloc] initWithNib:@"Controller2" bundle:nil];
    [obj setStringPassed:@"String"];  
    [self pushViewController:obj animated:YES];}

要传递多个值,您可以使用多个参数,例如: -

Controller2 *obj = [[Controller2 alloc] initWithNib:@"Controller2" bundle:nil];[obj passValue:@“String1” andValues:objArray withDate:date];

或者,如果需要传递超过3个与常用功能相关的参数,则可以将值存储到Model类中,并将该modelObject传递给下一个类

ModelClass *modelObject = [[ModelClass alloc] init]; modelObject.property1 = _property1;modelObject.property2 = _property2;
modelObject.property3 = _property3;Controller2 *obj = [[Controller2 alloc] initWithNib:@"Controller2" bundle:nil];[obj passmodel: modelObject];

所以,如果你想 -

1) set the private variables of the second class initialise the values by calling a custom function and passing the values.2) 
setProperties do it by directlyInitialising it using the setter method.3) pass more that 3-4 values related to each other in some manner , 
then create a model class and set values to its object and pass the object using any of the above process.

希望这可以帮助


查看完整回答
反对 回复 2019-05-20
  • 4 回答
  • 0 关注
  • 893 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信