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

我是iOS和Objective-C以及整个MVC范例的新手,我坚持以下内容:

我有一个视图作为数据输入表单,我想让用户选择多个产品。产品列在另一个带有a的视图中,UITableViewController我启用了多个选择。

我的问题是,如何将数据从一个视图传输到另一个视图?我将UITableView在数组中保留选择,但是如何将其传递回上一个数据输入表单视图,以便在提交表单时将其与其他数据一起保存到Core Data?

我已经四处浏览并看到一些人在app delegate中声明了一个数组。我读了一些关于单身人士的事情,但不明白这些是什么,我读了一些关于创建数据模型的内容。

执行此操作的正确方法是什么?我将如何进行此操作?


泛舟湖上清波郎朗
浏览 895回答 4
4回答

哆啦的时光机

MVC中的M用于“模型”,而在MVC范例中,模型类的作用是管理程序的数据。模型与视图相反 - 视图知道如何显示数据,但它不知道如何处理数据,而模型知道如何处理数据的所有内容,但不了解如何显示数据。模型可能很复杂,但它们不一定是 - 您的应用程序的模型可能像字符串或字典数组一样简单。控制器的作用是在视图和模型之间进行调解。因此,它们需要引用一个或多个视图对象和一个或多个模型对象。假设您的模型是一个字典数组,每个字典代表表中的一行。应用程序的根视图显示该表,它可能负责从文件加载数组。当用户决定向表中添加新行时,他们会点击一些按钮,您的控制器会创建一个新的(可变的)字典并将其添加到数组中。为了填充行,控制器创建一个详细视图控制器并为其提供新的字典。详细视图控制器填写字典并返回。字典已经是模型的一部分,因此没有其他任何事情需要发生。

智慧大石

有多种方法可以将数据接收到iOS中的不同类。例如 -分配另一个类后直接初始化。委派 - 用于传回数据通知 - 用于一次向多个类广播数据保存NSUserDefaults- 以便稍后访问单身人士课程数据库和其他存储机制,如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.希望这可以帮助
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS