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