ios如何从不同的类访问和修改变量?

时间:2012-09-27 21:26:59

标签: iphone ios properties uiviewcontroller

我有以下内容:

Class 1:

.h file:
@interface class1 : UIViewController

@property (assign,nonatomic) int number;

.m file:

- (void)viewDidLoad
{
    [super viewDidLoad];
number=1;
}

Class2:

.h file:
@interface class2 : UIView{
    class1 *Controller;
}

@property (retain,nonatomic) class1 *controller;

但是如果从第二个类中的任何地方访问数字变量,则值为0,你们中的任何一个都知道为什么吗?

2 个答案:

答案 0 :(得分:1)

该类是否已经打开并保留在某处(即您的导航堆栈)?如果是这样,您可以安全地访问和修改变量,因为它们已经初始化。如果不是这就是为什么你得到0的原因。

另一种方法是创建和维护一个数据单例,所有视图控制器都可以轻松地从中提取数据,然后您可以引用该数据单例来修改和更改值。

假设视图控制器已经初始化并处于活动状态,您可以执行以下操作:

MyViewController *vc = [[MyViewController alloc] init];
[vc setValue:@"100"];

答案 1 :(得分:0)

您可以使用appDelegate方法从其他类

访问该变量

例如,

你的class2中的

: .m文件

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
        Controller = appDelegate.viewControllerClass1;
    }
    return self;
}

在AppDelegate Class中,。m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.viewControllerClass1 = [[[Class1 alloc] init] autorelease];
    NavigationController=[[UINavigationController alloc]initWithRootViewController:self.viewControllerClass1];

 [self.window makeKeyAndVisible];
    return YES;
}