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 用户

ios手游平台 ios手游推荐 ios手游排行 ios手游模拟器 ios手游盒子

李洪强iOS开发之iOS学习方法收集

iOS开发 适配iOS10

ios兼容 iphoneX ios10 ios11