从vc2打印vc1 NSString

时间:2012-01-03 05:58:35

标签: iphone storyboard

我想从vc2打印出vc1.string1。

目前控制台显示:

  

vc1.string1(null)

当我没有使用故事板时,我访问了vc1变量,如下所示:

AppDelegate *appDelegate = [(AppDelegate *)[UIApplication sharedApplication]delegate];
NSLog(@"vc1.string1 %@", appDelegate.viewController.string1);

但是当我使用storyboard时,我不知道如何访问vc1.string。

请帮助,谢谢。

P.S。 这是我的项目的链接:http://dl.dropbox.com/u/12439052/AccessDiffClass.zip

//ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController {
    NSString *string1;
}

@property (nonatomic, strong) NSString *string1;

@end

#import "ViewController.h"

@implementation ViewController
@synthesize string1;

-(void)viewDidLoad {
    string1 = @"String One";
    NSLog(@"string1 %@", string1);
}

@end

VC2:

//ViewController2.h

#import <UIKit/UIKit.h>

@class ViewController;

@interface ViewController2 : UIViewController {
    ViewController *vc1;
}

@property (nonatomic, strong) ViewController *vc1;

@end

#import "ViewController2.h"
#import "ViewController.h"

@implementation ViewController2
@synthesize vc1;

-(void)viewDidLoad {
    NSLog(@"vc1.string1 %@", vc1.string1);
}

@end

2 个答案:

答案 0 :(得分:1)

我下载了你的项目并将这段代码添加到你的ViewController.m文件中:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSLog( @"preparing for segue" );
    ViewController2 * vc2 = [segue destinationViewController];
    vc2.vc1 = self;
}

这就像你希望在我的模拟器控制台中出现一样。

现在,这绝对是最好的事情。在ARC世界中,我不知道vc1是否被保留,或者我们是否泄漏或其他什么。您可以为ViewController2类提供NSString *属性更智能,该属性在prepareForSegue方法中设置。并为你的segue提供一个标识符。

Here is another StackOverflow question更多地谈论prepareForSegue(并且更详细一点)。

答案 1 :(得分:0)

上次试错了。

关键代码: appDelegate =(AppDelegate *)[[UIApplication sharedApplication] delegate];     vc1 = appDelegate.viewController;     NSLog(@“string1%@”,vc1.string1);

http://dl.dropbox.com/u/12439052/passingValue.zip