2013-07-11 23 views
2

新手問題:我正在編寫一個程序,它將生成一個特定的字符串,然後將其顯示在另一個視圖控制器的文本窗口中。我一直在測試,以確保代碼實際上使用NSLog命令生成字符串,並且我知道代碼按預期工作。由於某種原因,它不通過視圖控制器傳輸,我不知道爲什麼。任何幫助?下面是代碼片段:使用另一個類中的字符串變量

CreateStoryViewController.m

- (IBAction)makeStory:(id)sender 
    { 
    StoryLine *myStory =[[StoryLine alloc] init]; 

    [myStory setStory]; 
     self.story = myStory.plot; 
     NSLog(@"story is %@", self.story);//this is generating the correct story string 


    self.displayStoryController = [[BIDDisplayStoryViewController alloc] initWithNibName:@"DisplayStoryView" bundle:nil]; 

    [self.view insertSubview:self.displayStoryController.view atIndex:1]; 



    } 

DisplayStoryViewController.m

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    BIDCreateStoryViewController *newStory = [[BIDCreateStoryViewController alloc] init]; 
    NSLog(@"newStory.story is %@",newStory.story);//this generates null message 
    self.storyDisplay.text = newStory.story; 

} 

回答

3

這是錯誤的。你在第二個視圖控制器中實例化一個新的BIDCreateViewController對象。這不同於推動你的第二個BIDDisplayStoryViewController的原始BIDCreateViewController對象。

您需要在BIDDisplayStoryViewController的頭文件中聲明一個字符串屬性。

喜歡的東西

@property (nonatomic, retain /*or strong, if using ARC*/) NSString *storyToDisplay; 

一定要在實現文件中合成這一點。

當您第一個視圖控制器內創建BIDDisplayStoryViewController,你需要如下做到這一點:

self.displayStoryController = [[BIDDisplayStoryViewController alloc] initWithNibName:@"DisplayStoryView" bundle:nil]; 
self.displayStoryViewController.storyToDisplay = self.story; 

現在你的第二個視圖控制器內使用您可以self.myStory訪問此。雖然這將解決您的問題(並請理解,這不是我的意圖,在這裏不禮貌),但我覺得對iOS(以及一般的OOP)的工作原理缺乏瞭解。

1

在你的viewDidLoad方法中,你正在創造一個全新的故事。這個故事與您在makeStory:方法中所做的完全不同。您應該添加一個StoryLine屬性到DisplayStoryViewController.h,並在初始化displayStoryController後設置它。

0

使預期的變量在.h文件中的屬性類型,所以其他的文件都可以訪問它

相關問題