iphone viewController

时间:2011-05-10 12:05:58

标签: iphone

我正在创建一个应用程序,我必须从16 UITextFields传递数据,将它们以类对象的形式存储在数组中,并在其他viewController中显示该数组中的所有对象。

如何将数据从一个viewController传递到另一个?

6 个答案:

答案 0 :(得分:2)

假设您有两个名为viewController1viewController2的视图控制器。在textData中有NSArray的实例变量viewcontroller2。确保将@property@synthesize添加到变量中。在init的{​​{1}}方法中分配数组,您可以将数组从第一个viewController传递给第二个

viewController2

答案 1 :(得分:1)

通常,不相关的视图控制器之间的通信是丑陋设计的症状。我会避免这种情况。

单身对象可能是您的最佳选择。 从不使用应用程序的委托或NSUserDefaults在对象之间共享数据。这同样适用于在磁盘上的plist中保存数据并从另一个控制器重新加载它。那只是非常糟糕的设计。

顺便说一句:无论你的技术水平如何,都要获得这本书,Cocoa Design Patterns。 它与iPhone开发没有直接关系,但它以清晰的方式解释了Cocoa的设计和模式。了解它将有助于您设计未来的应用程序。

答案 2 :(得分:0)

您可以在第二个视图控制器中声明数组并设置属性并将其合成,然后您可以通过

将数据传递给第二个视图控制器
secondviewcontroller *obj = [[secondviewcontroller alloc]init];
obj.array = data;

答案 3 :(得分:0)

你可以轻松地完成它。在第一个控制器(例如FirstViewController)中,您可以将所有字段存储在数组中:

NSArray *_fields;

然后,您可以通过@property构造访问该数组:

@property (readonly) NSArray *fields;

在.m实现中,您可以通过@synthesize调用使其可用:

@synthesize fields = _fields;

在第二个控制器(例如SecondViewController)中,您应该使用相同的上述构造指向第一个控制器:

FirstViewController *_controller;

然后

@property(nonatomic, retain) FirstViewController *controller;

在.m中你会:

@synthesize controller = _controller;

创建第二个控制器时,必须将指针保存到第一个控制器。 E.g。

FirstViewController *first = [[FirstViewController alloc] init];
SecondViewController *second = [[SecondViewController alloc] init];
second.controller = first;

然后,您将能够使用second.controller.fields来读取第一个控制器中的UITextField实例。

答案 4 :(得分:0)

有数百种方法可以实现这一目标。这完全取决于您需要对数据做什么以及需要存储多长时间等等。

  • 您可以拥有一个包含数据的单例类 - 可以从应用程序的任何位置访问单例。
  • 您可以将数据存储在应用程序委托中。它也可以从应用程序的任何位置访问:[[UIApplication sharedApplication] delegate]
  • 您的viewControllers可以直接相互通信。
  • 您可以将数据存储为用户默认值(NSUserDefaults
  • 您可以将数据存储在文件中(可能是plist?)

答案 5 :(得分:0)

从一个视图控制器传递到下一个视图控制器的大量信息清楚地表明模型 - 视图 - 控制器设计不良。您的应用程序逻辑应尽可能地下推到域层中。

我猜你正在实现某种向导功能。引入一个新的FooWizardState域对象,并将其从一个视图控制器传递到下一个。通过这种方式,您可以轻松地将您的第一个视图控制器从16个文本字段分解为两个控制器,如果您需要,或者客户需要,每个控制器后面有8个文本字段。

使用此设计,您还可以轻松更改视图控制器,以防需要为iPad / iPhone用户界面惯用法重做向导的一个步骤。