Ios 在其他ViewController中设置变量时出现问题

Ios 在其他ViewController中设置变量时出现问题,ios,Ios,我想在另一个viewcontroller中设置一个变量,这样当我切换到它时它就在那里了,下面是代码: CalendarMonthViewController.m #import "ViewControllerInsert.h" ... - (void) calendarMonthView:(TKCalendarMonthView*)monthView didSelectDate:(NSDate*)date{ NSLog(@"Date Selected: %@",date);

我想在另一个viewcontroller中设置一个变量,这样当我切换到它时它就在那里了,下面是代码:

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
打印空值


要么我初始化错误,要么obj离开堆。“Strong”不应该出现哪种情况,对吗?

像这样转换日期

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

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

[formatter release];

因此,调用“viewDidLoad”方法并不能保证在调用属性“self.dateSelected”的setter之后调用它

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

但是我注意到您以错误的方式将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);

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

相反,请使用segue从一个视图控制器转到下一个视图控制器。在原始视图控制器上的
prepareForSegue
中,可以像
[segue destinationViewController]
一样引用目标视图控制器


然后,您可以在目标视图控制器上的
prepareforsgue

中设置自定义属性。您应该按照此步骤操作

 @interface ViewControllerInsert : UIViewController
  {
    NSDate *dateSelected;
   } 

 @property(nonatomic, assign) NSDate *dateSelected;



    @end


   and in .m file synthyse it like

     @synthesize dateSelected;

dateSelected不应为强类型,在赋值时应为assign类型。您需要使用dateformatter将日期转换为字符串。第一个NSLog工作正常,它通过stringWithFormat进行转换,我正在尝试assign Now您可以使用singleton或delegate。而且是重复的。answerstry logging“self.dateSelected”在开始时有很多问题,以发现它是否有一些值,然后您就下一步调试。同意,我也不理解它何时打印空值,如果视图控制器未显示且未强制加载其视图。啊,这是有意义的,现在将尝试它。我猜作者使用了新的xcode(如果他的代码可以编译),这意味着已经不需要编写额外的代码了。我认为在这种情况下,使用strong比assign/weak更好。
 @interface ViewControllerInsert : UIViewController
  {
    NSDate *dateSelected;
   } 

 @property(nonatomic, assign) NSDate *dateSelected;



    @end


   and in .m file synthyse it like

     @synthesize dateSelected;