尝试设置弹出框时,UITextView为nil

时间:2015-08-06 16:12:07

标签: ios objective-c

我有两个视图控制器:SavePopOverVCMainVC。我还有一个名为SavePopOver的nib文件。 SavePopOver有三个项目,UIButtonUIImageUITextView。图像和文本视图分别在property中有SavePopOverVC个字段的出口,分别称为captionImage和captionTextView。该按钮在IBAction中有SavePopOverVC的插座。

MainVC.m我的班级扩展中有以下两行。

SavePopOverVC *spvc;
UIPopoverController *popover;

在我同一档案的viewDidLoad中,我有以下与我的popover有关的行。

spvc = [[SavePopOverVC alloc] initWithNibNamed:@"SavePopOver" bundle:nil];
popover = [[UIPopoverController alloc] initWithContentViewController:spvc];

在我显示弹出窗口的函数中,同样在MainVC.m中,我有以下几行。

[popover setPopoverContentSize:CGSizeMake(600,200)];
[popover presentPopoverFromRect:_header.frame inView:self.view permittedArrowDirection:UIPopoverArrowDirectionAny animated:YES];
[((SavePopOverVC *)popover.contentViewController).captionTextView setText:@"Some text here"];

但是,captionTextView拨打setText:时,UIButton为零。应用程序没有崩溃,但文本没有设置。显示弹出窗口后,我单击captionTextView以保存键入captionTextView的字符串,我得到的字符串就好了。所以,我知道这两个最终是正确链接的,但是如何在显示弹出窗口时设置{{1}}?

如果值得注意的话,我会用这个专门为iPad开发。

1 个答案:

答案 0 :(得分:1)

很可能是nil,因为在您设置文字时其视图未加载。与大多数其他现代语言不同,在Objective-C中调用nil对象上的方法不会导致异常,它只是什么都不做。

要解决此问题,您可以在NSString中创建自定义SavePopOverVC属性,例如

@property (nonatomic, copy) NSString *caption;

在致电presentPopoverFromRect:之前,请为此媒体资源指定一个值。在SavePopOverVC内,覆盖viewDidLoad并设置captionTextView.text = self.caption;

可能有人不同意我,但我不建议将UI控件作为视图控制器中的属性公开。这种行为是其中一个原因。