Iphone 将阵列发送到viewcontroller iOS xcode
我有两个视图控制器: 索引 第二 在索引中,我有两个文本字段和按钮 我填充这个文本字段并按下“下一步按钮”进入第二个视图,我需要使用数组“显示”这两个文本字段(稍后我将发送JSON数据) 我试过这个: 将第二类中的@属性声明为textArray。然后,当从索引推到第二个时,您需要设置此属性 在第二个.h文件中Iphone 将阵列发送到viewcontroller iOS xcode,iphone,ios,xcode,xcode4.5,Iphone,Ios,Xcode,Xcode4.5,我有两个视图控制器: 索引 第二 在索引中,我有两个文本字段和按钮 我填充这个文本字段并按下“下一步按钮”进入第二个视图,我需要使用数组“显示”这两个文本字段(稍后我将发送JSON数据) 我试过这个: 将第二类中的@属性声明为textArray。然后,当从索引推到第二个时,您需要设置此属性 在第二个.h文件中 @property(nonatomic, strong) NSArray *textArray; 在Index.m文件中 Second *aSecond = [[Second alloc
@property(nonatomic, strong) NSArray *textArray;
在Index.m文件中
Second *aSecond = [[Second alloc] init];
aSecond.textArray = @[textField1.text, textField2.text];
//编写代码从索引推送到第二个索引
现在在第二个类中,您可以将其用作aSecond.textArray[0]和aSecond.textArray[1]
但若我切换页面(单击下一步),数组已为空
对于切换页面,我使用以下内容:
SecondPage *SecondPage = [self.storyboard instantiateInitialViewController];
SecondPage = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondPage"];
[self SecondPage animated:YES];
我怎样才能最好地实现?请帮忙!顺致敬意,
伊万
1) 变量名和类名相同
2) 我不确定XCode是否接受了您编写的[self SecondPage动画:是]
最后,您是否分配了阵列
编辑
哦,还有:
aSecond.textArray = @[textField1.text, textField2.text];
你应该写:
[aSecond.textArray addObject:textField1.text]; // using NSMutableArray
如果你通过故事板使用它,你需要这样做
SecondPage *aSecondPage = [self.storyboard instantiateInitialViewController];
aSecondPage = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondPage"];
aSecond.textArray = @[textField1.text, textField2.text];
[self aSecondPage animated:YES];
当您执行此操作时,
aSecond=[[Second alloc]init]代码>然后执行aSecondPage=[self.storyboard实例化eviewcontrollerwhiteIdentifier:@“SecondPage”]代码>,它正在创建一个单独的实例,而不是相同的实例。您在第一个实例上设置了此数组,并希望在第二个实例上设置它。为第二个视图控制器编写您自己指定的初始值设定项,如
-(id)initWithTextArray:(NSArray *)_textarray;
-(id)initWithTextArray:(NSArray*)\u textarray;
现在alloc init是第二个视图控制器
Second *aSecond = [[Second alloc] initWithTextArray:array];
Second*aSecond=[[Second alloc]initWithTextArray:array];
在第二个视图控制器的viewDidLoad方法中,使用textarray填充视图 有很多方法可以将值从一个控制器转移到另一个控制器,但对于您来说,我认为这将是有史以来最简单的方法。使用NSUserDefaults
第一个简单的方法
在第一控制器中
[[NSUserDefaults standardUserDefaults] setObject:@[textField1.text, textField2.text] forKey:@"listOfData"];
在第二控制器中
NSArray *array = [[NSUserDefaults standardUserDefaults]objectForKey:@"listOfData"];
第二个简单的方法是
DetailVC *detailVC = [self.storyboard instantiateInitialViewController];
detailVC = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailVC"];
detailVC.textArray = @[textField1.text, textField2.text];
嘿,你试过“全局变量和数组与委托方法”。在你移除之前,它不会释放。它将是全局的,直到应用程序实例
在代理类中
.h文件
NSMutableArray *obj;
.m文件
Synthesize & Alloc - init array.
那么
在ViewContoller.m文件中
AppDelegate *app;
app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
那么
在第二个.m文件中,您可以使用它
NSLog(@" Data : %@", app.obj);
请记住,无论何时需要此数组,都应该初始化“Delegate”类的“app”对象
它将在全球范围内工作和存储数据
谢谢。我可以想出两种方法:
1) 或者在第二次中添加一个方法,然后在初始化后调用它并将该值作为参数传递给一个方法。因此,在第二个.m-(void)push:(NSArray*)数组{}
中,在NSArray名称前用“&”传递它
2) 首先创建一个getter。由于它是NS,您必须首先在中使用assign so。h您放置@property(非原子,assign)NSArray*array1代码>
在First.m中添加@synthesis数组1代码>
并称之为
self.array1=[“t”、“e”、“s”、“t]代码>
然后在Second中传递对第一个类的引用,在Second.m中创建一个变量,并获取它
NSArray*array1=first.array1代码>
您可以编写自己的getter,但这并不合理。永远不要将类名作为实例变量名。它可能会导致很多问题。你分配了你的数组吗?它可能会工作,但你这样做是错误的。它只强制执行坏习惯和意大利面规则。访问您的代码的人应该只通过查找第二个UIViewController
init方法就知道,为了让它工作,它应该接收一个NSArray
@pradeepa的答案比这要好得多。@JackyBoy,当pradeepa将secondPage
实例化为secondPage=[self.storyboard instanceeviewcontrollerwhithidentifier:@“secondPage”]时,你认为他的答案会起什么作用代码>。您不能使用该代码。我认为您应该解释如何使用他正在使用的secondPage=[self.storyboard instanceeviewcontrollerwhiteIdentifier:@“secondPage]”的相关代码来完成此操作代码>。那样的话你会怎么办?
[app.obj addObject: text1.text];
NSLog(@" Data : %@", app.obj);