【问题标题】:objective c how to accessing applicationDidFinishLaunching variables from outside目标c如何从外部访问applicationDidFinishLaunching变量
【发布时间】:2014-12-05 09:41:14
【问题描述】:

我知道这可能是一个幼稚的问题,但对我来说是个问题。现在我已经在 applicationDidFinishLaunching 中声明了对象。如何在 applicationDidFinishLaunching 之外使用这个对象 例如,如何在按钮操作函数中使用这些对象

 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
AKanji *test2=[[AKanji alloc] init];
 ........
   }



 - (IBAction)kButton:(id)sender {
     //iwant to access test 2 here

     }

【问题讨论】:

  • 您对面向对象代码和实例变量的了解有哪些?
  • 我是他们的新手。抱歉,我搜索了网络机器人没有找到任何答案
  • 非常感谢,我会阅读的 :)
  • @user1478 不鼓励使用全局状态,因为这是不好的做法,也不是好的设计方法。实际上,如果建议在 AppDelegate 类中完成此操作(就像某些答案假设的那样),那也是错误的-尽管它正在使用通知,但问题看起来并不像它,因此希望应用程序委托不会在这里被滥用.

标签: ios objective-c macos cocoa cocoa-touch


【解决方案1】:

首先,您应该了解什么是面向对象的编程语言,以及它的正确用法。

现在进入您的问题部分。它根本不可能在其他方法中访问 local 变量。一旦范围/生命周期结束,它就会被创建并被销毁。 (在你的情况下,它是一个局部变量)

为此,您需要使用 ivar / 属性,在该方法中分配值,然后您可以在其他地方访问它。

【讨论】:

    【解决方案2】:

    AppDelegate.h中,导入你要创建实例的文件

    #import AKanji.h

    @interface AppDelegate : UIResponder
    @property(nonatomic, strong) AKanji *test2;
    @end
    

    在 AppDelegate.m 中

    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
                   // Insert code here to initialize your application
                   _test2 =[[AKanji alloc] init];
                   ........
      } 
    

    在 ViewController.m 中

    #import AppDelegate.h
    
    - (IBAction)kButton:(id)sender {
        //iwant to access test 2 here
        AppDelegate *delegate = [UIApplication sharedApplication].delegate;
        // Now you can access using delegate.test2
    
     }
    

    【讨论】:

      【解决方案3】:

      我相信您必须将 Kanji *test2 移到 applicationDidFinishLaunching 大括号之外。如果你想在那里分配/初始化它,你应该仍然可以在那里分配/初始化它,你也会在 kButton 中看到它。

      【讨论】:

      • 非常感谢我得到它我会把它作为财产
      【解决方案4】:

      AppDelegate 类与任何其他类一样具有 init。 因此它可以有@properties。 因此,在 init 上,您可以对元素进行任何初始化,以便在整个类中使用。

      【讨论】:

      • 知道了,所以我必须将它们声明为属性才能在任何地方访问它们,对吗?非常感谢
      • hup @AlaaAhmadM.Zakaria 通常属性是在类级别可访问的变量。如果你把它们放在 .m 里面(只在类里面),如果你把它们放在外面的 .h 上
      猜你喜欢
      • 2023-02-09
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多