0

我有以下内容:

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;

但是如果从第二类中的任何地方访问 number 变量,则值为 0 任何人都知道为什么吗?

4

2 回答 2

1

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

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

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

MyViewController *vc = [[MyViewController alloc] init];
[vc setValue:@"100"];
于 2012-09-27T21:30:52.067 回答
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;
}
于 2012-09-28T04:52:49.570 回答