2013-07-08 1 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]; 

Ребенок Вид .Н

#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 

Ребенок Вид .М

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

я могу знать, какой метод вы кладете журнал – karthik

+0

один пункт. Ваше имя переменной 'date' и' finalDate' очень сбивает с толку, поскольку они являются экземплярами 'NSString', а не' NSDate'. То же самое с 'enterTime'. Ваши имена переменных должны сообщать мне как можно больше информации о них. (Кроме того, не используйте буквы верхнего регистра для терпких имен переменных. «UIPicker» должен быть чем-то вроде «myDatePicker» или что-то еще). – Fogmeister

ответ

1

Что вы делать отлично. Вы должны вставить NSLog в view(Did/Will)Appear или какой-либо подобный метод, и вы можете использовать нотацию self.finalDate, чтобы убедиться, что вы не пытаетесь прочитать какой-то неинициализированный ivar.

Примечание: свойства синтеза Ивар с _ как префикс (_finalDate является правильное хранение, если вы не синтезируют его его с каким-либо другим именем)

Если вы хотите, чтобы убедиться, что все входные параметры передаются в контроллер представления, затем создайте для него метод init. Подобно этому:

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

Это не работает, даже с тестовой строкой для окончательной даты, например 'ChangeTimeView.finalDate = @" TEST ";' затем используя либо 'NSLog (@"% @ ", finalDate);', 'NSLog (@"% @ ", _finalDate);' и 'NSLog (@"% @ ", self.finalDate);' all return as 'null' –

+0

Ваш отредактированный метод сработал. Спасибо! –

0

Pass 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». –