2012-09-27 30 views
0

我有以下几点:ios如何从不同的类访问和修改变量?

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任何你知道这是为什么?

+0

没有'viewDidLoad'被调用?你是否在你的'class2'实例中实例化了controller属性?另外,请阅读Objective-C的命名约定,它将使您的代码更易于阅读,并帮助我们更轻松地为您提供帮助。 –

回答

1

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

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

假设视图控制器已初始化和积极的,你就可以做这样的事情:

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

会不会再次初始化它?我想要在应用程序的入门过程中编辑一个值,然后将其设置为一个新值,该值将在入门完成后保留。你会推荐一个单身人士,委托人或通知吗? –

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类,.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; 
}