2

我想在另一个视图控制器中设置一个变量,这样当我切换到它时它就在那里,这里是代码:

CalendarMonthViewController.m

#import "ViewControllerInsert.h"
...

- (void) calendarMonthView:(TKCalendarMonthView*)monthView didSelectDate:(NSDate*)date{
    NSLog(@"Date Selected: %@",date);


    ViewControllerInsert *controller = [[ViewControllerInsert alloc] initWithNibName:@"ViewControllerInsert" bundle:nil];
    controller.dateSelected = date;

    [self.tableView reloadData];
}

日期在这里有效,当我断点或 NSLog

ViewControllerInsert.h

#import <UIKit/UIKit.h>

@interface ViewControllerInsert : UIViewController

@property(nonatomic, strong) NSDate *dateSelected;

@end

视图控制器插入.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.


    NSDate *ds = self.dateSelected;

    NSString *dss = [NSString stringWithFormat:@"%@", ds];

    NSLog(@"works %@",dss);
}

打印 NULL

要么我初始化不正确,要么 obj 从堆中消失。“强”不应该发生什么,对吗?

4

5 回答 5

3

仅仅因为您创建了一个视图控制器的实例,并不意味着 iOS 在显示它时会使用该实例。为什么会呢?iOS 如何知道使用您的实例?它不在链中。

相反,使用 segue 从一个视图控制器转到下一个视图控制器。在prepareForSegue原始视图控制器上,您可以引用目标视图控制器,例如[segue destinationViewController].

然后,您可以在prepareForSegue.

于 2013-07-26T12:50:16.357 回答
1

因此,在调用属性“self.dateSelected”的设置器后,调用“viewDidLoad”方法并不能保证其调用。

于 2013-07-26T12:41:49.223 回答
1

我不知道您的 dateSelect 属性是否真的为 NULL,您必须在代码中查看断点。

但是我确实注意到您以错误的方式将 NSDate 转换为 NSString,这可能就是 NSLog 打印 NULL 的原因。

要将 NSDate 转换为 NSString,您必须使用 NSDateFormatter。试试下面的代码:

NSDateFormatter* formatter = [NSDateFormatter new];
[formatter setDateFormat:@"MM/dd/YYYY"];

NSString *dss = [formatter stringFromDate:self.dateSelected];
NSLog(@"works %@",dss);
于 2013-07-26T12:43:42.110 回答
1

你应该按照这个步骤

 @interface ViewControllerInsert : UIViewController
  {
    NSDate *dateSelected;
   } 

 @property(nonatomic, assign) NSDate *dateSelected;



    @end


   and in .m file synthyse it like

     @synthesize dateSelected;
于 2013-07-26T12:50:57.520 回答
0

像这样转换日期。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"ddmmyyyy"];

NSString *stringFromDate = [formatter stringFromDate:self.dateSelected];

[formatter release];
于 2013-07-26T12:39:39.583 回答