0

我有 2 个视图控制器:

索引中的第二个索引我有 2 个文本字段和按钮。

我填写了这个文本字段并按“下一步按钮”到第二个视图,我需要使用数组“显示”这两个文本字段(稍后我将发送 JSON 数据)。

我试过这个:将第二类中的@property 声明为textArray。然后在从 Index 推送到 Second 时,您需要设置此属性。

在 Second.h 文件中,

@property(nonatomic, strong) NSArray *textArray;

在 Index.m 文件中,

Second *aSecond = [[Second alloc] init];
aSecond.textArray = @[textField1.text, textField2.text];

//编写代码从Index推送到Second类现在在​​类Second中,你可以使用它作为aSecond.textArray[0]和aSecond.textArray[1]

但是如果我切换页面(单击下一步)数组已被清空。

对于切换页面,我使用这个:

SecondPage *SecondPage = [self.storyboard instantiateInitialViewController];
    SecondPage = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondPage"];
    [self SecondPage animated:YES];

我怎样才能最好地实现?请帮忙!最好的问候伊万。

4

6 回答 6

3

为第二个视图控制器编写您自己指定的初始化程序,例如。

-(id)initWithTextArray:(NSArray *)_textarray;

现在分配初始化第二个视图控制器

第二个 *aSecond = [[Second alloc] initWithTextArray:array];

在第二个视图控制器的 viewDidLoad 方法中,使用您的 textarray 来填充您的视图。

于 2013-01-15T08:39:29.837 回答
2

如果您通过情节提要使用它,则需要这样做,

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 instantiateViewControllerWithIdentifier:@"SecondPage"];时,它会创建一个单独的实例而不是相同的实例。您在第一个实例上设置了这个数组,并希望在第二个实例上设置它。

于 2013-01-15T08:37:06.700 回答
0

嘿,您是否尝试过“使用委托方法的全局变量和数组”。在您删除之前,它不会释放。在应用程序实例之前它将是全局的。

在代表课上,

.h 文件

NSMutableArray *obj;

.m 文件,

Synthesize & Alloc - init array.

然后,

在 ViewContoller .m 文件中

AppDelegate *app;
app = (AppDelegate *)[[UIApplication sharedApplication] delegate];

然后,

[app.obj addObject: text1.text];

在第二个 .m 文件中,您可以使用它。

NSLog(@" Data : %@", app.obj);

请记住,无论何时你想要这个数组,你都应该初始化 'Delegate' 类的 'app' 对象。

它将在全球范围内工作和存储数据。

谢谢。

于 2013-01-15T09:10:11.523 回答
0

我可以想到两种方法:

1) 在 Second 中添加一个方法并在初始化后调用它并将值作为参数传递给方法。所以在 Second.m 中-(void) push :(NSArray *)array{},在你的 NSArray 名称之前用“&”传递它。

2) 在 First 中创建一个吸气剂。由于它的 NS,您必须在 First.h 中使用 assign 所以在 First.m 中@property(nonatomic, assign) NSArray *array1; 添加@synthesize array1; 并调用它 self.array1 = [@"t", @"e", @"s", @"t"]; 然后在 Second 中传递对 First 类的引用并在 Second.m 中创建一个变量并获取它 NSArray *array1 = first.array1;

您可以编写自己的吸气剂,但不合理。

于 2013-01-15T15:36:27.507 回答
-2
SecondPage *SecondPage = [self.storyboard instantiateInitialViewController];
    SecondPage = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondPage"];
    [self SecondPage animated:YES];

1) 你的变量名和你的类名是一样的 2) 我不确定 XCode 是否接受你写的 [self SecondPage animated:YES];

最后,你分配了你的数组吗?

编辑;

哦,还有:

aSecond.textArray = @[textField1.text, textField2.text];

你应该写:

[aSecond.textArray addObject:textField1.text]; // using NSMutableArray
于 2013-01-15T08:32:17.940 回答
-3

有很多方法可以将值从一个控制器转移到另一个控制器,但对你来说,我认为这将是最简单的。采用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]; 
于 2013-01-15T08:45:10.900 回答