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;

}
4

3 回答 3

3

这是错误的。您正在BIDCreateViewController第二个视图控制器中实例化一个新对象。这与BIDCreateViewController推动您第二次的原始对象不同BIDDisplayStoryViewController

你需要在你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)的工作原理缺乏了解。

于 2013-07-11T21:41:01.643 回答
1

在您的 viewDidLoad 方法中,您正在制作一个全新的故事。这个故事与你在 makeStory: 方法中制作的故事完全不同。您应该将 StoryLine 属性添加到 DisplayStoryViewController.h,并在您初始化 displayStoryController 后设置它。

于 2013-07-11T21:41:53.467 回答
0

在 .h 文件中将预期变量设为属性类型,以便其他文件可以访问它

于 2013-07-11T22:32:12.180 回答