我有一个基于导航的应用程序,它有多个视图。是否可以在整个应用程序中使用一个NSMutableArray?我可以在一个视图中向该NSMutableArray添加对象,然后从其他视图中删除同一NSMutableArray中的对象吗?我试过了
myappAppDelegate *appDelegate = (myappAppDelegate *)[[UIApplication sharedApplication] delegate];
但是当我尝试访问appDelegate的数组时它给了我null。如果有人可以给我任何想法或帮助链接或tutrorial。提前谢谢。
答案 0 :(得分:2)
对于你的问题类型,我会使用单身。
http://en.wikipedia.org/wiki/Singleton_pattern
appdelegate也是一个单身人士,但如果你使用自己的单身人士,你可以减少编码行数。
答案 1 :(得分:2)
如果您的应用程序中有多个视图,并且在这种情况下您希望每个视图都可以访问一个变量,那么您应该始终创建一个模型/数据(单例)类并定义变量在里面。像这样:
//DataClass.h
@interface DataClass : NSObject {
NSMutableArray *arrGlobal;
}
@property(nonatomic,retain)NSMutableArray *arrGlobal;
+(DataClass*)getInstance;
@end
//DataClass.m
@implementation DataClass
@synthesize arrGlobal;
static DataClass *instance =nil;
+(DataClass *)getInstance
{
@synchronized(self)
{
if(instance==nil)
{
instance= [DataClass new];
}
}
return instance;
}
现在在视图控制器中,您需要将此方法称为:
DataClass *obj=[DataClass getInstance];
obj.arrGlobal = arrLocal;
每个视图控制器都可以访问此变量。您只需要创建一个Data类的实例。
答案 2 :(得分:1)
AppDelegate方法应该有效,你应该弄清楚为什么它不起作用,即使你选择单身。
获取appDelegate
指针的语句看起来是正确的,所以我猜测指向数组的指针要么没有在myappDelegate
类中设置(并保留),要么就是你首先没有正确创建AppDelegate实例。
答案 3 :(得分:1)
在Singleton
方法中添加此
instance.arrGlobal = [[NSMutableArray alloc] init];
这样:
@synchronized(self)
{
if(instance==nil)
{
instance= [DataClass new];
instance.arrGlobal = [[NSMutableArray alloc] init];
}
}
return instance;
这样你就可以初始化数组并正确使用它。