在另一个类中使用字符串变量

时间:2013-07-11 21:31:46

标签: iphone

菜鸟问题:我正在编写一个程序,它将生成一个特定的字符串,然后在另一个视图控制器的文本窗口中显示它。我一直在测试以确保代码实际上使用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 个答案:

答案 0 :(得分: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)的工作方式缺乏了解。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

将目标变量设为.h文件的属性类型,以便其他文件可以访问它