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;

しかし、2番目のクラスのどこからでも数値変数にアクセスする場合、値は0です。理由を知っている人はいますか?

4

2 に答える 2

1

クラスはすでに開いていて、どこか(つまり、ナビゲーションスタック)に保持されていますか?その場合、変数はすでに初期化されているため、変数に安全にアクセスして変更できます。そうでない場合は、おそらくそれが0が返される理由です。

もう1つの方法は、すべてのView Controllerがデータを簡単に描画できるデータシングルトンを作成および維持し、そのデータシングルトンを参照して値を変更および変更できるようにすることです。

ビューコントローラがすでに初期化されてアクティブであると仮定すると、次のようなことができます。

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 に答える