【问题标题】:Access methods or property from another class without calling ViewDidLoad?从另一个类访问方法或属性而不调用 ViewDidLoad?
【发布时间】:2012-01-02 13:48:16
【问题描述】:

通常,我会像这样调用另一个类方法: MyClass *class= [[MyClass alloc] init]; [类我的方法];

但问题是,它会调用 ViewDidLoad。这对我来说是个问题。

有没有办法在不调用 ViewDidLoad 的情况下访问另一个方法中的属性或调用另一个方法中的类?

谢谢!

Edit1:你是说如果我这样做它不会调用我的 VDL?:

MyClassB *classB = [[[MyClassB alloc] init] autorelease];
[classB.pauseButton setHidden:NO];

另外,当我调用一个触发 ViewDidLoad 的方法时呢?

【问题讨论】:

    标签: ios class methods properties


    【解决方案1】:

    当然;将myMethod 重构为调用viewDidLoad

    也就是说,如果你调用方法a和方法a调用b,但是你不想调用b,那么你需要修改a的实现到有时不调用b。通过修改a 或在包含a 的类上创建一个不调用b 的新方法c

    如果问题是你正在调用系统框架中的一个方法,而它却在你不想要的时候调用viewDidLoad,那么答案就是你真的不能做你认为你想做的事。但这只是一个症状;真正的答案是您的应用架构需要重新审视,以更好地适应系统的框架。


    Edit1:你是说如果我这样做它不会调用我的 VDL?:

    MyClassB *classB = [[[MyClassB alloc] init] autorelease];
    

    这是创建MyClassB 的新实例。如果屏幕上已经显示了一个实例,那么您很可能不需要一个新实例,是的,这就是调用 viewDidLoad 的原因。

    要么创建一个可以指向classB 的现有实例的实例变量,要么以其他方式获取该实例;把它挂在应用委托或其他东西上。

    总体而言,您似乎对实例化对象与仅引用对象的含义以及所有这些如何适合 UIKit 应用程序创建模型的含义感到困惑。在你掌握它之前,这有点棘手。研究一些展示如何使用视图控制器的示例,因为它们可能已经解决了类似的问题。

    【讨论】:

    • 好吧,我在 A 类中几乎有一个按钮。目前该按钮显示在 B 类中。我希望能够在 A 类中隐藏该按钮,直到我想要。有没有办法在不调用 View Did Load 的情况下做到这一点?
    • 我不确定为什么隐藏/显示按钮会导致viewDidLoad 被调用,除非您实际加载视图。但是如果按钮已经显示并且 viewDidLoad 被调用,你确定你没有创建 B 的新实例,加载它,然后隐藏 that 按钮?
    【解决方案2】:

    您可以创建一次视图控制器并将其保存在实例变量中,然后使用实例变量来调用方法或访问属性。

    eg.
    if(self.myClass==nil)
      self.myClass =  [[MyClass alloc] init];
    
    [self.myClass doStuff];
    [self.myClass.pauseButton setHidden:NO];
    

    【讨论】:

    • 所以在这段代码中,我为我的其他类创建了一个 ivar 和属性,而 VDL 永远不会被这段代码调用?
    猜你喜欢
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    相关资源
    最近更新 更多