0

通常、私はinitメソッドで変数を渡してきましたが、タブバーを使用して表示された1つのViewControllerクラスの変数があり、別のタブの場合は別のViewControllerクラスからアクセスする必要があるため、今回はそれを行うことができません。バーが押されました。私の理解では、@ propertyを使用して変数にアクセスできますが、現在は機能しているため、何か間違ったことをしています。これが私が持っているものです:

Class 1 Header file

@interface DailyViewController : UIViewController <UIActionSheetDelegate> {

NSDate *today;

}

@property (readwrite, nonatomic, retain) NSDate *today;



Class 2 implementation file:


- (void)viewWillAppear:(BOOL)animated{

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterLongStyle];
[formatter setTimeStyle:NSDateFormatterNoStyle];
DailyViewController *otherClass = [[DailyViewController alloc] init];   

NSString* todayString = [formatter stringFromDate:otherClass.today];
r_todayLabel.text = todayString;
[otherClass release];
[formatter release];

}

4

5 に答える 5

3

持っていない

@synthesize today;

「Class1.m」ファイルでは、今日のgetterメソッドとsetterメソッドは作成されません。これは、あなたの財産を変更したり、外部から見たりすることができないことを意味します。

于 2009-06-16T02:39:17.323 に答える
1

AppDelegate(または保存されている場所)からDailyViewController *オブジェクトを取得し、そこから日付を取得する必要があります。

新しいDailyViewController*オブジェクトを作成し、その日付で初期化せずに、その日付フィールドにアクセスします(デフォルトではnilになります)。

何かのようなもの

MyAppDelegate* appDelegate = [[UIApplication sharedApplication] delegate];
DailyViewController *otherClass = appDelegate.dailyViewController;
NSDate* dailyViewToday = otherClass.today;

しかし、それはすべて、優れたプログラミングの多くのルールに違反しています。

まず、MVC(Model View Controller)を目指す必要があるため、「今日」の日付をモデルに保存する必要があります。そうすれば、両方のクラスが1つのビューのコントローラーからではなく、モデルから今日アクセスできるようになり、クラス2がDailyViewControllerにアクセスする必要がなくなるため、AppDelegateにその参照を格納する必要がなくなります。これは悪い考えです。これは、UIApplicationの委任とは関係がなく、実際には偽装された単なるグローバル変数であるためです。

于 2009-06-17T02:57:01.830 に答える
0

今日、初期化する必要があります。たとえば、DailyViewControllerのコンストラクターで、次を追加します。

self.today = [NSDate date];
于 2009-06-16T07:15:31.637 に答える
0

ソースファイル「Class1.m」にありますか

@synthesize today;
于 2009-06-16T02:36:48.483 に答える
0

Peterの答えを見ると(「まず、MVC(Model View Controller)を目指す必要があるため、「今日」の日付をモデルに保存する必要があります。そうすれば、両方のクラスが、一方のビューのコントローラーからではなく、モデルから今日にアクセスできます。その場合、クラス2がDailyViewControllerにアクセスする必要はまったくないため、AppDelegateにクラス2への参照を格納する必要はありません。これは、UIApplicationの委任とは関係がなく、実際には単なる変装したグローバル変数。」)、質問があります。

両方のクラスはどのようにモデルにアクセスしますか?各ビューコントローラのinit呼び出しは、モデルへのポインタで渡されますか?(つまり、AppDelegateはモデルオブジェクトを作成してから、ビューコントローラーの各initメソッドにポインターを渡しますか?)

サル

于 2009-06-17T19:28:39.433 に答える