故事板Modal ViewController不会被忽略;尝试了一切

时间:2012-02-26 19:42:48

标签: protocols storyboard modalviewcontroller

我(想)我已经在Apple的文档和网络上广泛研究过这个问题,无论是在这里还是其他地方。然而,经过几个小时的故障排除后,我没有想法。我的模态视图控制器拒绝在适当的时候解散自己。

我知道模态控制器必须由呈现模态视图的控制器解除,据我所知,这就是我正在做的事情。

问题:


这是prepareForSegue中包含的用于呈现viewcontroller的代码,完整地:

if ([segue.identifier isEqualToString:@"DISCREPANCYVC"]) {

    DiscrepancyViewController *destController = segue.destinationViewController;
    destController.discrepancyDelegate = self;
}

模态控制器包含两个行为正常的UIPickerViews。选择器视图用于构造“classificationString”,即NSString。

我在模态视图上有一个“完成”按钮,当按下该按钮时,会调用此方法/选择器(根据我设置的协议定义):

[self.DiscrepancyDelegate didFinishWithClassification:classificationString];

didFinishWithClassification方法如下所示:

- (void)didFinishWithClassification:(NSString *)classification {

    [self dismissModalViewControllerAnimated:NO];

如果重要,协议定义为

@protocol DiscrepancyViewControllerDelegate <NSObject>
@required
    - (void)didFinishWithClassification:(NSString *)aClassification;

@end

将引用保存回呈现视图的属性显示为:

@property (strong, nonatomic) id <DiscrepancyViewControllerDelegate> DiscrepancyDelegate;

还有四个额外的属性(强大的,非原子的)用于存放填充UIPickerViews的四个数组(每个选择器有两个组件)。

我尝试了动画和非动画解雇,但没有改变行为。

可能导致这种情况的原因是什么?我正在使用ARC,所以在尝试转储模态屏幕之前不能释放任何东西,对吗?从我读过的内容来看,viewDidUnload()不一定会在这种情况下触发(并且在我的情况下不会触发)。

帮助!!

THX,

泰德

2 个答案:

答案 0 :(得分:0)

使委托协议工作需要9个步骤。在我的回答here中查看所有内容。

此外,声明:“我知道模态控制器必须由呈现模态视图的控制器解除”是不正确的。它被建议为良好的形式,但是您可以将dismiss语句放在模态视图控制器中,如果您没有其他理由拥有委托,那么我会这样做而不是忍受设置委托协议的复杂性。

答案 1 :(得分:0)

我明白了;有点。我必须错误地连接Outlet,或者某种重复的连接,因为在删除了按钮和控制器,拣选器和控制器之间的所有连接,然后重置它们之后,它开始工作。我不知道我做了什么(现在让我发疯了)但这不是编码问题。

建议:用细齿梳子连接。他们可以掩盖问题,而不会将自己视为错误。

Grrrrrrr。