2013-07-08 28 views
1

我遇到了一个问题,我看不出问题所在。我试图将一个简单的NSString传递给一个子变量,但它仍然作为null返回,即使我使用NSLog来显示变量中有一个字符串。iOS不会将变量传递给子视图?

变量finalDate不会传递给子视图。

父视图

ChangeTimeViewController *ChangeTimeView = [[ChangeTimeViewController alloc] init]; 
NSLog(@"%@", date); 
ChangeTimeView.finalDate = date; 
[ChangeTimeView setDelegate:self]; 

[self.navigationController pushViewController:ChangeTimeView animated:YES]; 

子视图.H

#import <UIKit/UIKit.h> 

@protocol ChangeTimeViewControllerDelegate; 

@interface ChangeTimeViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource> 

@property (nonatomic, weak) id <ChangeTimeViewControllerDelegate> delegate; 
@property (nonatomic) NSString *enteredTime; 
@property (nonatomic, strong) UIPickerView *UIPicker; 
@property (nonatomic, strong) NSString *finalDate; 

@end 

@protocol ChangeTimeViewControllerDelegate <NSObject> 

- (void)childTimeViewController:(ChangeTimeViewController *)viewController didChooseValue:(NSString *)string; 

@end 

子视图.M

NSLog(@"%@", self->finalDate); 
+0

可我知道哪种方法你把你的日志 – karthik

+0

一点。你的变量名'date'和'finalDate'非常混乱,因为它们是'NSString'而不是'NSDate'的实例。与'enteredTime'相同。你的变量名称应该告诉我尽可能多的关于它们的信息。 (另外,不要使用大写字母来表示变量名称“UIPicker”应该像“myDatePicker”或其他)。 – Fogmeister

回答

1

你是什么做得很好。您应该将NSLog插入view(Did/Will)Appear或某些类似的方法,并且您可以使用self.finalDate表示法来确保您不会尝试读取某些未初始化的伊娃。

注:性质合成具有_为前缀的ivars(_finalDate是正确的存储,除非你有一些其他的名字合成它它)

如果你想确保所有输入参数传递给视图控制器,然后为其创建一个init方法。与此相似:

- (id)initWithDate:(NSDate*)date delegate:(id)delegate 
+0

即使对于最终日期的测试字符串,如'ChangeTimeView.finalDate = @“TEST”;'然后使用NSLog(@“%@”,finalDate);','NSLog(@“%@ “,_finalDate);'和'NSLog(@”%@“,self.finalDate);'全部返回为空' –

+0

您编辑的方法奏效。谢谢! –

0

NSString作为ChangeTimeView.finalDate = @"This Is my Simple String";和使用/放NSLog在作秀viewDidLoad方法是在富裕或nextViewController不?否则,如果您的日期NSString)是正确的,那么您的代码是正确的。

+0

仍然无法使用。返回null。 –

+0

你有没有任何警告讯息?如果是,那么临时删除您的PROTOCOL声明..并检查它。 – iPatel

0

检查,如果你喜欢设置发生了什么,

ChangeTimeView.finalDate = @"MyString"; 

和view.m日志NSLog(@"%@", self.finalDate);

+0

还在工作,查看评论。仍然返回'null'。 –