我想从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
答案 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);