我有以下内容:
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 :(得分: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;
}