【问题标题】:Can't access class instance from another class无法从另一个类访问类实例
【发布时间】:2012-06-21 12:43:04
【问题描述】:

在我的 AppDelegate 中,我导入了我创建的类的标头,并对其实例进行了属性化和合成(在 AppDelegate 中)。现在我试图从另外两个视图访问这个实例中的一个方法和一个变量。我对 Objective-c 比较陌生,但到目前为止我已经了解到,如果我这样做:

AppDelegate *appdelegate = [AppDelegate new];

我只会从 AppDelegate 中的类中获取一个新实例,因此如果我从一个视图设置变量,我将无法从另一个视图访问它。如果我这样做的话,我已经读过:

AppDelegate *ap = (AppDelegate *)[[UIApplication sharedApplication] delegate];

它将允许我访问现有实例。但它不起作用。

我尝试这样做的方式完全错误吗?非常感谢您的帮助!

更新:

当我在 AppDelegate 中执行此操作时:

myClass.string = @"test";
NSLog(@"appDelegate: %@", myClass.string);

我明白了:

appDelegate: (null)

更新2:

我写了@class AppDelegate;在 viewController 中的 @import 行下方,但我仍然无法访问 myClass。一个主要问题(这可能是视图无法正常工作的原因)是我什至无法从 AppDelegate 访问 myClass。

我在 AppDelegate.h 中写道:

@property (strong, nonatomic) testClass *myClass;

在 AppDelegate.m 中:

#import "testClass.h"
@synthesize myClass;

这应该是对的吧?

myClass.h

 @property (strong, nonatomic) NSString *string;

myClass.m

@synthesize string;

当我尝试从 appDelegate 访问 myClass 时,我写道:

self.myClass.string = @"test";
NSLog(@"appDelegate: %@", self.myClass.string);

结果是:

appDelegate: (null)

【问题讨论】:

  • 假设您在 iOS 上编程,您应该能够使用第二个示例中的代码获取 sharedApplication 委托。您设置的委托必须符合UIApplicationDelegate 协议。但是“它不起作用”是相当广泛的。什么不起作用?它返回零吗?或者是你的方法的调用不起作用。有什么错误吗?有什么警告吗?
  • 谢谢。是的,我在 iOS 上编程。根本没有错误。实例中的方法似乎根本没有被调用。这意味着它必须符合 UIApplicationDelegate 是什么意思?我错过了一个被剪断的代码吗?

标签: iphone objective-c xcode class instance


【解决方案1】:

我认为你必须分配和初始化myClass

myClass = [MyClass alloc] init]写入AppDelegate.m文件

【讨论】:

    【解决方案2】:

    #import "AppDelegate"

    还要写

    @class AppDelegate;

    【讨论】:

      【解决方案3】:

      除非您没有显示它,否则您不会分配 testClass 也不会将其分配给 myClass。 Objective-C 不像 C++ 或 Java,您可以简单地声明一个特定类类型的变量并将其实例化到堆栈上。您使用的每个类都必须实例化,无论是手动还是通过 InterfaceBuilder。例外情况是各种框架提供的一些类具有单个共享实例。您只需请求共享实例,而不是分配这些类。但是,这里的情况并非如此。这是你自己的类,所以你需要分配它。

      看起来像:

      myClass = [[testClass alloc] init];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-13
        • 1970-01-01
        • 2016-01-15
        • 2012-12-18
        • 1970-01-01
        • 2012-05-21
        相关资源
        最近更新 更多