2011-04-14 86 views
0

我正在重新发布我之前发布的这个问题。当我在描述这个问题之前,我忽略了一些重要的信息,这些信息导致人们在尝试提供解决方案时走上错误的道路。希望这可以更好地解释。通过一些其他类访问变量

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

@interface A : NSObject { 
    NSMutableArray *someStuff; 
} 

@property (nonatomic, retain) NSMutableArray *someStuff;  

@end 

上午

@implementation A 

@synthesize someStuff; 

// blah, blah, blah 

然后,因为我正在做一个iPhone应用程序,有一个包含该对象类型的变量的应用程序代理:

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]; //等等,等等,等等

然后,在另一个类中(在此情况下的视图控制器),我试图以这种方式访问​​ 'someStuff':

AViewController.m
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 

NSMutableArray *someArray = appDelegate.aPtr.someStuff; 

因此,问题在于,这种风波很好。我曾想过,如果你在实现中使用@porperty指定和@synthesize,那么你应该能够直接访问变量,因为编译器实际上创建了get/set函数。

我觉得我太过分了解Java为什么不能工作。任何人都能让我放松吗?

非常感谢,

克雷格

+0

试试这个,AppDelegate * appDelegate =(AppDelegate *)[[UIApplication sharedApplication] delegate]; NSLog(@“aPtr:%@ \ nsomeStuff:%​​@”,appDelegate.aPtr,appDelegate.aPtr.someStuff); – Ravin 2011-04-14 04:17:30

回答

1

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

+0

我理解正确吗?你们是否说它不起作用,因为我没有从'委托'方法投下结果?那么,我将不得不承认,我可能永远不会偶然发现这一点。我会试一试。谢谢@Ravin和@JimaDeVoe – Craig 2011-04-15 03:23:52

+0

工作!谢谢! – Craig 2011-04-15 03:32:07

0

我认为它不工作,因为你没有在任何地方初始化编曲,做一个功能在上午和应用程序委托调用时要初始化A类是功能并且在Am函数中也不要忘记初始化数组。

+0

arr?你的意思是aPtr?但我做到了,对吧?在AppDelegate.m中我有这样的说法:aPtr = [[A alloc] init];在A.m实现中有一个'init'方法(虽然,没错,我没有在这里展示)。 – Craig 2011-04-15 03:18:44