2009-12-11 93 views
2

我想要一个数组从一个类中获取数据,以便在具有相同数据的另一个类中对我有效。
如果我们在applicationDelegate类上声明一个数组。
然后在两个类中声明applicationDelegate的一个对象。
并将数组从一个类分配到appDelegate.array,我将能够获得跨类的数组?如何在两个类之间共享数组?

回答

2

我与迈克。离开App Delegate。

你在控制何时以及如何实现对象。在创建相关类的实例时,如果多个类能够访问相同的数据,交出数据或获取数据的方法很重要。

一个例子,给出类WVParent和WVChild。

WVParent有一个属性,的someArray,这是阵列的其他对象需要:

@interface WVParent : NSObject { 

NSArray *someArray 

} 
@property (nonatomic, retain) NSArray *someArray; 

@end 

然后你有WVChild,它本身有一个名为parentObject属性:

@class WVParent; 

@interface WVChild : NSObject { 

WVParent *parentObject; 

} 
@property (nonatomic, assign) WVParent *parentObject; 

@end 

假设父正在创建子实例,您将分配它并分配父代:

WVChild *child = [[WVChild alloc] init]; 
child.parentObject = self; 

那么孩子实例可以通过访问的someArray:

self.parentObject.someArray 

这仅仅是一个选项。您也可以将数组本身传递给孩子,假设数据是静态的,并且在应用程序会话过程中不太可能发生变化。

通过这种方式,我们不再需要在App Delegate中存在数据源,而是生活在一个更适合其创建,维护和自动售货的类中。如果您的课程已经存在并且只能通过获得应用程序委托才能访问其他应用程序,那么您可能需要考虑一下您的架构。

更多的依赖注入这里:

http://en.wikipedia.org/wiki/Dependency_injection

+0

我“失踪”在child.parentObject:self; – 2011-03-21 07:26:52

+0

这真是愚蠢的我。该:应该是一个=符号。固定。 – 2011-03-21 20:21:43

+0

谢谢:)好吧,我明白了,但很高兴看到我做了正确的事情...... – 2011-03-21 22:28:23

1

是的,你可以在你的applicationDelegate类中声明一个成员/属性,尽管你应该尝试遵循单一责任原则,并确保你不会在你的应用程序委托中填充大量其他共享的东西(这会发生很多与iPhone代码)。

另一种方法是在创建对象的构造函数时将数组注入到对象的构造函数中。

很难知道设计方面的最佳解决方案,而不知道这些数据是什么以及它的真正属性。

+0

我试图用一个正常的变量。但即使它不工作。 – wolverine 2009-12-11 13:26:28