我正在创建一个应用程序,我必须从16 UITextFields
传递数据,将它们以类对象的形式存储在数组中,并在其他viewController
中显示该数组中的所有对象。
如何将数据从一个viewController
传递到另一个?
答案 0 :(得分:2)
假设您有两个名为viewController1
和viewController2
的视图控制器。在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)
有数百种方法可以实现这一目标。这完全取决于您需要对数据做什么以及需要存储多长时间等等。
答案 5 :(得分:0)
从一个视图控制器传递到下一个视图控制器的大量信息清楚地表明模型 - 视图 - 控制器设计不良。您的应用程序逻辑应尽可能地下推到域层中。
我猜你正在实现某种向导功能。引入一个新的FooWizardState
域对象,并将其从一个视图控制器传递到下一个。通过这种方式,您可以轻松地将您的第一个视图控制器从16个文本字段分解为两个控制器,如果您需要,或者客户需要,每个控制器后面有8个文本字段。
使用此设计,您还可以轻松更改视图控制器,以防需要为iPad / iPhone用户界面惯用法重做向导的一个步骤。