0

通常我一直在 init 方法中传递变量,但这次我不能这样做,因为我在一个使用选项卡栏显示的 ViewController 类中有一个 var,当使用不同的选项卡时,我需要从不同的 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(模型视图控制器),因此您的“今天”日期应该存储在您的模型中。然后两个类今天都可以从模型而不是一个视图的控制器访问,然后类 2 根本不需要访问 DailyViewController,因此不需要在 AppDelegate 中存储对它的引用,这是一个坏主意因为它与 UIApplication 的委托无关,实际上只是变相的全局变量。

于 2009-06-17T02:57:01.830 回答
0

在查看彼得的答案时(“首先,您应该针对 MVC(模型视图控制器),因此您的“今天”日期应该存储在您的模型中。然后两个类都可以从模型而不是从一个视图的控制器访问今天,并且那么类 2 根本不需要访问 DailyViewController,因此不需要在 AppDelegate 中存储对它的引用,这是一个坏主意,因为它与 UIApplication 的委托无关,实际上只是一个变相的全局变量。”),我有一个问题。

这两个类如何访问模型?每个视图控制器的初始化调用是否会通过指向模型的指针传递?(即,AppDelegate 创建模型对象,然后将指针传递给每个视图控制器的 init 方法?)

萨尔

于 2009-06-17T19:28:39.433 回答
0

在源文件“Class1.m”中你有

@synthesize today;
于 2009-06-16T02:36:48.483 回答
0

您今天需要初始化,例如在 DailyViewController 的构造函数中添加以下内容:

self.today = [NSDate date];
于 2009-06-16T07:15:31.637 回答