objective c如何从外部访问applicationDidFinishLaunching变量

时间:2014-12-05 09:41:15

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

我知道这可能是一个天真的问题,但对我来说这是一个问题。现在我在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

     }

4 个答案:

答案 0 :(得分:2)

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

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

要实现这一点,您需要使用ivar / property,在该方法中分配值,然后您可以在其他地方访问它。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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 :(得分:-1)

AppDelegate类有一个init作为任何其他类。 因此它可以有@properties。 所以在init上你可以对元素进行任何初始化,这样就可以在整个类中使用。