通过其他几个类访问变量

时间:2011-04-14 04:12:18

标签: iphone objective-c

我正在转发我前一天发布的这个问题。当我在遗漏一些关键信息之前我描述了这个问题,这些信息导致人们试图提供解决方案。希望这是更好的解释。

我在Objective-C中有一个情况,我试图通过另一个对象访问一个对象的变量。课程(简化):

A.H

@interface A : NSObject {  
  NSMutableArray *someStuff;  
}  

@property (nonatomic, retain) NSMutableArray *someStuff;    

@end 

A.M

@implementation A  

@synthesize someStuff;  

//  blah, blah, blah  

然后,因为我正在做一个iPhone应用程序,所以有一个app委托包含这个对象类型的变量:

AppDelegate.h

@interface AppDelegate : NSObject <UIApplicationDelegate> {  

   A *aPtr;  
}  

@property (nonatomic, retain) A *aPtr;  
@end  

AppDelegate.m

@implementation AppDelegate  

@synthesize aPtr; 
  • (BOOL)应用程序:(UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    aPtr = [[A alloc] init]; // blah,blah,blah

然后,在另一个类(在本例中是一个视图控制器)中,我试图以这种方式访问​​'someStuff':

AViewController.m

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];  

NSMutableArray *someArray = appDelegate.aPtr.someStuff;  

所以,问题在于这种方式很好。我原以为如果你在实现中执行@porperty指定和@synthesize,那么你应该能够直接访问变量,因为编译器实际上创建了get / set函数。

我认为我是一个Java瘾君子,无法理解为什么这不起作用。有谁能让我高兴吗?

非常感谢,

克雷格

2 个答案:

答案 0 :(得分:1)

是的,你可以做到这一点。按照评论中的说明进行操作,换句话说,对应用程序委托进行类型转换,以避免出现警告。此外,请确保您正在导入AppDelegate的界面以及您尝试从中访问此文件的A类。

答案 1 :(得分:0)

我认为它没有工作,因为你没有在任何地方初始化arr,在Am中创建一个函数,在app中委托在初始化类A时调用该函数,并且在该函数中的Am中也不要忘记初始化数组。