Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Xcode-从不同viewController中的textfield检索值_Ios_Objective C_Xcode - Fatal编程技术网

Ios Xcode-从不同viewController中的textfield检索值

Ios Xcode-从不同viewController中的textfield检索值,ios,objective-c,xcode,Ios,Objective C,Xcode,我有2个视图控制器(Newticket1控制器和Newticket2控制器)。视图1有一个名为“ticket”的文本字段,视图2希望访问该值 这是我在视图2中的代码 NewTicket1Controller *screen1 = [[NewTicket1Controller alloc] init]; NSLog(@"%@", screen1.ticket.text); 上面的NSLog语句为票证文本字段值返回null。但它不是空的。如果我切换回视图1,我可以看到该字段中有一个值 我不能检索这

我有2个视图控制器(Newticket1控制器和Newticket2控制器)。视图1有一个名为“ticket”的文本字段,视图2希望访问该值

这是我在视图2中的代码

NewTicket1Controller *screen1 = [[NewTicket1Controller alloc] init];
NSLog(@"%@", screen1.ticket.text);
上面的NSLog语句为票证文本字段值返回null。但它不是空的。如果我切换回视图1,我可以看到该字段中有一个值


我不能检索这样的变量吗?

当您实例化一个新的NewTicket1Controller时,它的所有属性都初始化为默认值。这不会提供对任何现有NewTicket1Controller对象的引用。如果您正在使用序列图像板,则可以在prepareForSegue中将其传递给其他视图控制器;如果您没有使用序列图像板,则可以在创建新的视图控制器时通过编程将其传递给新的视图控制器,假设它是从NewTicket1Controller创建的。

无需初始化视图即可访问它。如果要将textfield中包含的文本发送到另一个视图..则需要将该票证文本字段值存储到另一个视图控制器的字符串中

在NewTicket2Controller中,使用名为ticketString的NSString获取属性并合成它……然后您可以使用该引用在NewTicket1Controller中存储票证的值

NewTicket2Controller *screen2 = [[NewTicket2Controller alloc] initWithNibName:@"NewTicket2Controller" bundle:nil];

screen2.ticketString=self.ticket.text;//if you propertise the ticket textfield

NSLog(@"%@", screen2.ticketString);
在切换到Newticket2控制器时按按钮操作。在Newticket1控制器上输入一些代码

NewTicket2Controller *screen2 = [[NewTicket2Controller alloc] initWithNibName:@"NewTicket2Controller" bundle:nil];

screen2.ticketString=self.ticket.text;//if you propertise the ticket textfield

NSLog(@"%@", screen2.ticketString);

希望它对您有所帮助。

您刚刚创建并初始化了screen1。任何和所有值都将为零或初始化

有几件事: 您希望尽可能将数据(模型)与视图和控制器分开

您必须在两个视图控制器之间提供一些连接。 一种方法是将其中一个设置为另一个的薄弱环节

Newticket2控制器示例 @属性(非原子,弱)newticket1控制器*委托

然后,当您创建NewTicket2Controller时,您将分配self.delegate=screen1

之后,您可以使用委托访问方法


(理想情况下,您应该为代表设置一个协议)

其他人已经给了您部分答案。让我立即陈述一切

首先,不要试图直接操纵另一个视图控制器的视图对象。这严重违反了面向对象编程的“封装”原则。您应该将视图控制器的视图视为私有视图,并添加属性或方法以在视图控制器之间进行通信

其次,您正在创建视图控制器的全新实例,并希望能够使用该新视图控制器实例更改现有视图控制器中的设置。这就像买了一辆与你现有汽车完美匹配的新车,在新车上设置了电台,然后想知道为什么旧车上的电台没有改变。他们是不同的车!他们是不同的对象!它们可能是相同的特征,但它们是同一对象的不同实例。如果你有一个同卵双胞胎,它仍然是另一个人,对吗


您需要一种方法来获取指向现有NewTicket1Controller对象的指针。如何做到这一点取决于程序的设置方式。发布一些有关如何设置视图控制器的信息。您正在使用导航控制器吗?NewTicket1Controller是您的根视图控制器吗?如何从视图控制器1到视图控制器2?赛格?(假设您使用的是故事板。如果您没有,请告诉我们。)

伙计,您正在使用
C
。您正在为
NewTicket1Controller
创建一个新的内存引用,其中
screen1.ticket
对象为空,而实际值存在于已初始化的
NewTicket1Controller
中,您只需使用内存引用从一个控制器传递到另一个控制器,使用属性。我确实想到了使用属性传递,但我想看看是否有更简单的方法,因为我要访问的文本字段值远不止1个。谢谢iPhonec,谢谢Wyatt。请看我在上面问题中的评论。你可以用几种不同的方法来解决这个问题。在没有看到完整实现的情况下,您可以使用委托,如果这在您的案例中有意义的话。但是,将一组字符串传递给另一个视图控制器的最简单的方法可能仍然是按照我的建议,在prepareForSeqgue中,或者在以编程方式创建NewTicket2Controller之后,但是将所有数据包装到NSDictionary中并传递整个dictionary。然后NewTicket2Controller可以解析它,找到它需要的东西。NSDictionary听起来更有意义。我会搞砸的。谢谢,我现在明白了。Newticket1控制器和Newticket2控制器都是导航控制器的一部分。NewTicket1Controller不是根视图,但它是导航控制器中的第二个视图,NewTicket2Controller是第三个视图。我用一个按钮(故事板序列)从Newticket1控制器转到Newticket2控制器。好的,你解决了你的问题了吗?