gpt4 book ai didi

ios - 如果你不能先调用 [super init] 怎么办

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:01:10 25 4
gpt4 key购买 nike

我正在尝试对 UIPopoverController 进行子类化,并赋予 IT 确定要创建和呈现哪种 UIViewController (contentViewController) 的适当责任,而不是将弹出窗口的调用代码与该责任搞得一团糟。但我遇到了几个问题。

根据 Apple 文档,在第一次调用之前没有正当理由做任何事情。

if (self = [super init])

所以我尝试了这一点,认为当我的代码检查我传入的数据并决定创建和发送哪个 UIViewController 时,我可以稍后在方法中简单地设置 contentViewController 属性,但是调用 [super init] 时出现错误,告诉我必须调用另一个初始化程序。

[super initWithContentViewController:...]

所以我的问题如下图所示。我不能使用自定义初始化程序的第一行来做出决定,然后在对 super 的调用应该是第一个调用时调用 super 并且根据苹果的说法,没有充分的理由不让它成为第一个打电话。

initWithData:(MyDataObject*)data
// examine data object and determine what kind
// of UIViewController to create and present
//
// [super initWithContentViewController:myDecidedContentViewController

要做什么?谢谢。

最佳答案

来自 Apple documentationUIPopoverController 上:

When initializing an instance of this class, you must specify the view controller that provides the content for the popover.

UIPopoverController 本身没有任何内容,它需要另一个 UIViewController 来呈现您实际想要呈现的内容。 UIViewController 的任何子类都可以,只要它不与 popover Controller 冲突。

例如,您可以使用来自 StoryboardXIB 的自定义设计 Controller ,或以编程方式实例化的 UIViewController。但是,您不仅限于这两个。子类化 UIPopoverController 无济于事,因为子类仍然需要一个内容 Controller 。

现在,子类化 UIPopoverController 并在该类中实现创建内容 Controller 的逻辑违反了 Single Responsibility Principle因为您将混合 popover 类的职责。目前 UIPopoverController 有一个很好的职责 - 在弹出窗口中显示 View Controller ,如果您还让它负责创建内容 Controller ,那么您只会增加它的负担。

我的建议是创建一个 MyPopoverFactory 类,该类具有创建弹出框及其内容 Controller 的方法。例如:

- (UIPopoverController*)popoverForSomething

关于ios - 如果你不能先调用 [super init] 怎么办,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30206759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com