2012-02-08 73 views
0

以我IB我创建了一个SEGUE从一个UIViewController中(标识符=列表)推到另一个(标识符=细节)。然后在数据携带到的UIViewController返回(空)

prepareForSegue 

我这样做是为了扛过一些数据测试目的:

Detail *detailsViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Details"]; 

NSLog(@"Current \"Details\" class in use: %@",detailsViewController); 

NSLog(@"Prep Complete, Testing begins=============="); 
detailsViewController.TitleField.text = @"Random Text"; 
detailsViewController.DuedateField.text = [NSString stringWithFormat:@"%@",[NSDate date]]; 
detailsViewController.ReminderFieldOne.text = [NSString stringWithFormat:@"%@",[NSDate date]]; 
detailsViewController.ReminderFieldTwo.text = [NSString stringWithFormat:@"%@",[NSDate date]]; 
detailsViewController.NotesArea.text = @"Note 1: This doesnt seem to work."; 

NSLog(@"Items from %@:",detailsViewController); 
NSLog(@"Title Field = %@",detailsViewController.TitleField.text); 
NSLog(@"Duedate field = %@",detailsViewController.DuedateField.text); 
NSLog(@"Reminder field 1 = %@",detailsViewController.ReminderFieldOne.text); 
NSLog(@"Reminder field 2 = %@",detailsViewController.ReminderFieldTwo.text); 
NSLog(@"Notes = %@",detailsViewController.NotesArea.text); 

NSLog(@"===============Testing Complete"); 

然而,从同一detailsViewController几乎所有的NSLogs回报(空)值的数据被送到。

2012-02-08 13:38:53.016 TodoApp[10132:fb03] Items from <Detail: 0x6d70120>: 
2012-02-08 13:38:53.017 TodoApp[10132:fb03] Title Field = (null) 
2012-02-08 13:38:53.017 TodoApp[10132:fb03] Duedate field = (null) 
2012-02-08 13:38:53.018 TodoApp[10132:fb03] Reminder field 1 = (null) 
2012-02-08 13:38:53.019 TodoApp[10132:fb03] Reminder field 2 = (null) 
2012-02-08 13:38:53.020 TodoApp[10132:fb03] Notes = (null) 

我已经在它一段时间了,找出它为什么是(null)。有没有人有任何线索为什么发生这种情况?我错过了什么吗?

谢谢你的时间!

编辑:详细信息视图多数民众赞成编辑和一个多数民众赞成加载似乎不同,但这并不能解释为什么日志返回(空)从相同的详细信息视图中获取数据作为编辑。

2012-02-08 14:41:11.937 TodoApp[10567:fb03] Current "Details" class in use: <Detail: 0x6a883a0> 
2012-02-08 14:41:11.937 TodoApp[10567:fb03] Prep Complete, Testing begins============== 
2012-02-08 14:41:11.939 TodoApp[10567:fb03] Items from <Detail: 0x6a883a0>: 
2012-02-08 14:41:11.940 TodoApp[10567:fb03] Title Field = (null) 
2012-02-08 14:41:11.940 TodoApp[10567:fb03] Duedate field = (null) 
2012-02-08 14:41:11.941 TodoApp[10567:fb03] Reminder field 1 = (null) 
2012-02-08 14:41:11.942 TodoApp[10567:fb03] Reminder field 2 = (null) 
2012-02-08 14:41:11.942 TodoApp[10567:fb03] Notes = (null) 
2012-02-08 14:41:11.943 TodoApp[10567:fb03] ===============Testing Complete 
2012-02-08 14:41:11.953 TodoApp[10567:fb03] View Loaded: <Detail: 0x6d1feb0> 

有没有办法让我的应用程序加载?

回答

0

因为在调用-viewDidLoad方法之前网点没有被初始化。为要存储的每个值创建iVars,并在目标控制器的init方法之后将其分配。然后将这些值分配给viewDidLoad中的插座。

例如

在您的目的地控制器的.h文件中

@property (nonatomic, copy) NSString *noteText; 

然后

Detail *detailsViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Details"]; 
detailsViewController.noteText = @"Note 1: This doesnt seem to work."; 

而且在detailsViewController -viewDidLoad方法

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.NotesArea.text = noteText; 
} 
+0

将试试这个,并更新你。 – 2012-02-08 12:18:57

+0

NotesArea仍为空,对不起。 :( – 2012-02-08 12:29:23

+0

等待,你想的NSLog之前实际推新视图控制器?这样viewDidLoad中从来没有触发,把的NSLog的内部-viewDidLoad,不经过初始化代码。 – Eugene 2012-02-08 13:08:31

0

如果你在正确的Apple documentation这种方法阅读,他们“最后提到 ”这种方法每次调用它时,都会创建指定视图控制器的新实例。“ 所以你必须非常小心。

+0

其实,这是好的,怎么我将数据发送到新创建的控制器,所以它仍然应该显示。我正在研究Eugene的解决方案atm。将更新。 – 2012-02-08 12:18:06

+0

仍然为空,将查看您现在给我的链接。 – 2012-02-08 12:30:21