2011-05-10 103 views
3

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

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

回答

2

假设您有两个视图控制器,分别命名为viewController1viewController2。在viewcontroller2中有一个实例变量textDataNSArray。确保将@property@synthesize添加到变量中。分配在阵列中的viewController2init方法和可以通过

viewController2.textData = viewController1.textArray; 
0

通过从所述第一的viewController到第二阵列可以在第二视图控制器声明阵列和设置属性和合成,然后就可以将数据从第一个传递到第二个视图控制器通过

secondviewcontroller *obj = [[secondviewcontroller alloc]init]; 
obj.array = data; 
+0

这就是传统的C++方式。我想用obj-c的方式使用id 2011-05-10 13:09:38

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; 

当您创建第二个控制器,您将不得不将指针保存到第一个控制器。例如。

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

然后,你将能够使用second.controller.fields第一控制器读取UITextField实例。

+0

有点困惑。 – 2011-05-10 12:19:14

+0

关于什么?问,我会回答...我纠正了一些事情,使其更清晰。 – marzapower 2011-05-10 12:20:14

+0

在哪里定义FirstViewController和SecondViewController?在MainWindow.xib中? – 2011-05-10 13:08:32

0

有几百种方法可以实现这一点。这一切都取决于你所需要的数据做什么和你需要多长时间来存储它等

  • 你可以有它在存储数据的单个类 - 单身是在应用程序的任何地方访问。
  • 您可以将数据存储在应用程序委托中。它也可以从您的应用程序的任何地方访问:[[UIApplication sharedApplication]代表]
  • 您的viewControllers可以直接相互交谈。
  • 您可以存储数据作为用户默认值( NSUserDefaults
  • 你可以将数据存储在一个文件中(可能是一个的plist?)
+1

“您可以将数据存储为用户默认值(NSUserDefaults)”不这样做。 NSUserDefaults是为了存储用户的喜好,而不是任何数据。 – pt2ph8 2011-05-10 12:17:26

+0

你是对的,编辑。 – iceydee 2011-05-10 12:20:14

+0

使用sigleton类?是否有可能?我对这项技术很陌生。我已经从Java转换过来了。 – 2011-05-10 12:24:28

1

一般无关视图控制器之间的通信是难看的症状设计。我会避免这种情况。

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

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

0

从一个视图控制器传递给下一个视图控制器的许多信息是一个明显的模型 - 视图 - 控制器设计的迹象。您的应用程序逻辑应该尽可能地下推到领域层。

我猜你正在实施某种向导的功能。引入一个新的FooWizardState域对象,并将其从一个视图控制器传递到下一个视图控制器。通过这种方式,您可以轻松地将您的第一台视图控制器从16个文本字段中分解出来,以便在需要时或每位客户要求的情况下,每两个控制器都带有8个文本字段

使用此设计,您还可以轻松更改视图控制器,以防万一需要为iPad/iPhone用户界面习语重新进行向导的一步操作。

相关问题