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