【发布时间】:2012-10-23 23:22:46
【问题描述】:
所以我可以像这样将数据从第一个视图传输到第二个视图:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"Check Mark Segue"])
{
NSLog(@"Transfering Data");
AutoRenewDrop *controller = segue.destinationViewController;
controller.transferData = self.renewDate.text;
}
}
但是,当用户点击完成并且 transferData 工作正常但 renewDate.text 没有改变时,我尝试将新值传输回 renewDate.text。这是我用来传回数据的代码:
-(IBAction)done:(UIStoryboardSegue *)segue {
[self.navigationController popViewControllerAnimated:YES];
AddR *add = [[AddR alloc] init];
add.renewDate.text = transferData;
}
谁能告诉我如何解决这个问题?
【问题讨论】:
-
您为什么希望它起作用?
- [[SomeClass alloc] init]每次调用时都会返回一个新实例,因此这将设置 AddR 类的另一个实例的属性...您应该区分类和对象。 -
我明白了,感谢您的评论。那么我会只做 AddR *add; 吗?抱歉,我对 Xcode 并不陌生,但这是我第一次不得不在视图之间共享数据,所以我仍在学习中。
-
不要那样做! 在这种情况下它要么未初始化(并崩溃),要么为零,然后它不会做任何事情。您需要向第二个视图添加一个属性,将其设置为第一个视图(因此本质上是通过第一个视图本身),然后从第二个视图,在
self(指向第一个视图)上使用该属性设置文本。 -
啊,当然。如果你不介意的话,愿意给我一个例子来说明这是如何工作的吗?我试图了解如何做到这一点。我把它改成了我相信你所说的方式,但它仍然不适合我。
-
在第二个视图的类上,声明
@property UIView *previousView;,然后在同一个类中,写[self.previousView setText:blah];。另外不要忘记在您创建第二个视图实例的第一个视图的类的方法中写入secondView.previousView = self;。
标签: objective-c ios xcode data-transfer