IOS。 segue.destinationViewController 对象与加载的Controller不同
Posted
技术标签:
【中文标题】IOS。 segue.destinationViewController 对象与加载的Controller不同【英文标题】:IOS. segue.destinationViewController object is different from the Controller loaded 【发布时间】:2013-01-21 20:24:09 【问题描述】:我正在尝试使用导航控制器在两个 ViewController 之间进行转换,segue.destinationViewController 引用的对象是:0x1cd93590(下一个视图),但是当对新视图进行更改时,它具有不同的数字对象:0x1cd4556d0。我的代码是:
- (void)updateCodeProduct:(NSString *)code
[session stopRunning];
AudioservicesPlaySystemSound(kSystemSoundID_Vibrate);
AudioServicesPlaySystemSound(1111);
// db acces.
NSString *cadena = @"http://172.20.10.2/consultaProd.php?codigo=";
cadena = [cadena stringByAppendingString:codigo];
NSURL *url = [NSURL URLWithString:cadena];
NSError *error = nil;
NSString *retorno = [[NSString alloc] initWithContentsOfURL:url encoding:NSASCIIStringEncoding error:&error];
if (retorno == nil)
NSLog(@"Error %@\n%@", url, [error localizedFailureReason]);
return;
self.detailProd = nil;
self.detailProd = [retorno componentsSeparatedByString:@"\n"];
[self performSegueWithIdentifier:@"DetailSegue" sender:self];
prepareForSegue 方法是:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
NSLog(@"%@", [segue destinationViewController]);
if ([segue.identifier isEqualToString:@"DetailSegue"])
[segue.destinationViewController updateDetail:detailProd];
执行了segue,但视图没有反映当前信息,因为是不同的对象。
任何帮助将不胜感激:)
【问题讨论】:
【参考方案1】:updateDetail
方法有什么作用?如果它试图更新目标控制器中的控件,那么这样做还为时过早,因为尚未创建控件。您只想在目标控制器中设置属性(例如 NSString
或其他)。然后目标控制器应获取该属性并更新其在该目标控制器的viewDidLoad
中的控件。
简而言之,目标控制器的地址将与视图控制器本身的地址相同。您没有向我们展示您所报告的这两个地址的 NSLog
声明,因此我们无法说出那里发生了什么。
【讨论】:
感谢@Rob,方法-updateDetal属于DetailViewControler,更新两个UILabel,引用(如果它试图更新目标控制器中的控件,现在这样做还为时过早,因为控件赢了'尚未创建)。我更正了这个创建 NSString 并在 -viewdidLoad 方法中更新标签的问题。并且工作正常....非常感谢。 :)以上是关于IOS。 segue.destinationViewController 对象与加载的Controller不同的主要内容,如果未能解决你的问题,请参考以下文章
最佳实践。通过支持 iOS 5、iOS 6 和 iOS 7 UI 使 iOS 应用程序通用
iOS 应用程序 - 如何仅为 iOS 8 用户添加 iOS 8 功能,同时仍支持所有 iOS 7 用户