【问题标题】:Xcode : cannot access to a NSString value set from another classXcode:无法访问另一个类的 NSString 值集
【发布时间】:2012-12-17 17:12:09
【问题描述】:

我正在尝试将字符串变量从 mainVC 类传递给 detailVC 类,但是当 viewDidLoad 启动时,myStringLabel 为空,它应该包含“只是一个测试”。 我不知道为什么。

mainVC.m

#import "mainVC.h" 
@implementation mainVC 
@synthesize 

-(IBAction) openSecondController {
    //Ouverture de DetailVC
    detailVC *dVC = [[detailVC alloc] init];
    dVC.myStringLabel=@"Just a test";
    NSLog(@"dVC.myStringLabel before calling dVC :%@", dVC.myStringLabel);
    [self performSegueWithIdentifier:@"progDetailSegue" sender:nil];
    NSLog(@"dVC.myStringLabel after calling dVC :%@", dVC.myStringLabel) ;   
}    

detailVC.h

#import <UIKit/UIKit.h>
@interface detailVC : UIViewController {
 NSString *myStringLabel;
 IBOutlet UILabel *labelForString;
}
@property (nonatomic, strong) UILabel *labelForString;
@property (copy) NSString *myStringLabel;

detailVC.m

#import "detailVC.h"

@implementation detailVC
@synthesize myStringLabel, labelForString;

-(void) viewDidLoad {
NSLog(@"myStringLabel in viewDidLoad : %@", dVC.myStringLabel) ;
labelForString.text=myStringLabel;
}

-(IBAction) closeViewController {
//Fermeture com_mobilizProgramDetailViewController ouverte en Modal. 
[self dismissViewControllerAnimated:YES completion:nil];

}

NSLOG 输出:

2012-12-17 11:48:58.520 DataTransfert[5068:f803] dVC.myStringLabel before calling dVC : Just a test
2012-12-17 11:48:58.520 DataTransfert[5068:f803] myStringLabel in viewDidLoad : (null)
2012-12-17 11:48:58.520 DataTransfert[5068:f803] dVC.myStringLabel after calling dVC :Just a test

【问题讨论】:

    标签: xcode nsstring


    【解决方案1】:

    在 viewDidLoad 中,将 dvc.mystringlbl 替换为 self.mystringlbl

    【讨论】:

    • -(void) viewDidLoad { NSLog(@"myStringLabel in viewDidLoad : %@", myStringLabel) ; labelForString.text=myStringLabel; } 标签为空 NSSlog 显示 : myStringLabel in viewDidLoad : (null) 仍然没有变化
    • 那是因为故事板保留了它自己的实例副本,dVC 是您创建的新实例,但是当您执行 segue 时,故事板会向您显示它自己的 deaialVC 实例,您必须从故事板中取出该实例并在该实例上设置 labelStr ,类似于 'UIStoryboard mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; detailVC *dVC = (detailVC)[mainStoryboard instantiateViewControllerWithIdentifier:@""];
    • 你可以在你的故事板detailVC nib中找到“控制器ID”,我假设你的故事板的名字是MainStoryboard。
    • 无法在 xcode 4.5.5 中找到标识符,如下图所示:!Valid XHTML
    • 先选择viewController,然后就会看到这个属性
    【解决方案2】:

    @iVishal:

    我创建了一个这样的对象 ID:DKg-dG-bO1

    对于 viewController,这就是你在说什么?

    【讨论】:

      【解决方案3】:

      问题解决了。

      我使用了另一个解决方案:-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

      在 viewController 显示之前调用,以便在 veiwcontroller 之间传递数据。

      -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
      detailVC *dVC = [segue destinationViewController];
      dVC.myStringLabel=@"Just a test";
      }
      

      然后它工作! 在日志输出中,我得到了这个结果:

      myStringLabel in viewDidLoad : Just a test
      

      非常感谢@iVishal 试图帮助我。

      祝大家新年快乐!!

      【讨论】:

        猜你喜欢
        • 2021-10-16
        • 2013-07-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多