我正在创建一个应用程序,需要从16个UITextFields
中传递数据,以类对象的形式将它们存储在数组中,并在其他viewController
中显示该数组中的所有对象。
如何从一个viewController
传递数据到另一个viewController
?
我正在创建一个应用程序,需要从16个UITextFields
中传递数据,以类对象的形式将它们存储在数组中,并在其他viewController
中显示该数组中的所有对象。
如何从一个viewController
传递数据到另一个viewController
?
viewController1
和viewController2
的视图控制器。在viewcontroller2
中有一个NSArray
的实例变量textData
。确保将@property
和@synthesize
添加到变量中。在viewController2
的init
方法中分配数组,然后可以通过以下方式将数组从第一个视图控制器传递到第二个视图控制器:viewController2.textData = viewController1.textArray;
通常,不相关的视图控制器之间的通信是丑陋设计的症状。我会避免这种情况。
单例对象可能是您最好的选择。绝对不要使用应用程序的委托或NSUserDefaults
来共享对象之间的数据。同样适用于将数据保存在磁盘上的plist中,并从其他控制器重新加载它。这只是极其糟糕的设计。
顺便说一下:无论您的技能水平如何,请获取此书,Cocoa Design Patterns。虽然它与iPhone开发没有直接关系,但它以清晰的方式解释了Cocoa的设计和模式。理解它将有助于您在设计未来的应用程序时获得很多帮助。
有很多方法可以实现这个。这完全取决于您需要对数据做什么以及需要存储多长时间等。
在视图控制器之间传递过多的信息是一个糟糕的模型-视图-控制器设计的明显标志。您的应用程序逻辑应尽可能地下推到域层。
我猜您正在实现某种向导功能。引入一个新的FooWizardState
域对象,并将其从一个视图控制器传递到另一个视图控制器。这样,如果需要,您可以轻松地将第一个视图控制器从16个文本字段拆分为每个控制器8个文本字段,或者根据客户需求进行更改。
使用此设计,您还可以轻松更改向导中的任何一个视图控制器,以便符合iPad / iPhone用户界面习惯。
你可以在第二个视图控制器中声明数组,并设置属性和合成,然后通过以下方式从第一个视图控制器传递数据到第二个:
secondviewcontroller *obj = [[secondviewcontroller alloc]init];
obj.array = data;
你可以用简单的方法来实现。在第一个控制器(例如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实例。UIViewController
类的类,如果需要,可以使用通过 Interface Builder 创建的新 .nib 文件来实例化它们。 - marzapower