难以访问另一个视图控制器中的对象

时间:2012-02-22 01:01:22

标签: iphone objective-c ios ipad

我在名为ViewController的视图控制器中设置一个字符串,并试图在其他地方访问它。这是代码:

ViewController.h

NSString *string;

...

@property (retain) NSString *string;

ViewController.m

@synthesize string;

...

-(void)viewDidLoad {

...

string = @"Test";

}

OtherViewController.m

#import "ViewController.h"

...

-(void)viewDidLoad {

    ViewController *vc;
    vc = [[ViewController alloc] init];

    NSLog(@"String: %@", vc.string);

}

但是,日志显示为:String: (null)。我做错了什么?感谢。

3 个答案:

答案 0 :(得分:1)

viewDidLoad的{​​{1}}仅在加载ViewController时调用。如果需要,view会延迟加载。当拨打view时。

我不确定你想要达到的目标,但这对我来说似乎是一种代码味道。

由于@Fscheidl指出您正在创建新实例而不访问现有实例,因此这可能会增加您的问题。我仍然认为你的主要问题是你假设只是通过创建vc.view来调用viewDidLoad,而不是这种情况

答案 1 :(得分:0)

您通过调用ViewController来创建[[ViewController alloc] init];的新实例。此实例甚至没有设置string。您必须访问ViewController完全实例。

如果您直接从OtherViewController创建ViewController的实例,则可以将以下内容添加到OtherViewController.h

#import "ViewController.h"
@property (nonatomic, retain) ViewController *previousViewController

创建OtherViewController时,您可以设置:

//alloc and init instance of OtherViewController
myOtherViewController.previousViewController = self;

viewDidLoad:方法中,您可以按如下方式访问字符串:

NSLog(@"String: %@", previousViewController.string);

答案 2 :(得分:0)

编辑:它不一定需要是NSObject类,如果你愿意,你也可以在你的viewController类上执行此操作,只需确保也包括

-(id)init
标题上的

----编辑结束

如果您正在尝试创建一个可供另一个视图控制器访问的类,为什么不尝试NSObject而不是视图控制器(考虑到您只需要获取该字符串值)

例如,让我们调用viewController类“global”类

所以在global.h,你提出

#import <Foundation/Foundation.h>

@interface GlobalVar : NSObject

@property (nonatomic, strong) NSString *myString;


-(id)init;

@end

然后,在global.m你提出

#import "GlobalVar.h"

@implementation GlobalVar

@synthesize myString;

-(id)init
{
    self = [super init];
    if(self)
    {
        myString = [[NSString alloc]initWithFormat:@"the String"];
    }

    return self;
}



@end

之后,每当你需要访问全局类中包含的“myString”对象时,你就可以提出

在标题处:

#import "GlobalVar.h"
...
...
@property (nonatomic, strong) GlobalVar *globalVar;

在实施文件中:

@synthesize globalVar;

...
...

self.globalVar = [[GlobalVar alloc]init];
NSString *theString = globalVar.myString;
NSLog(@"content of my string is : %@",theString);

你去;)