我可以在多个视图应用程序中使用单个NSMutableArray吗?

时间:2011-10-03 14:00:33

标签: iphone objective-c nsmutablearray uiapplication iphone-developer-program

我有一个基于导航的应用程序,它有多个视图。是否可以在整个应用程序中使用一个NSMutableArray?我可以在一个视图中向该NSMutableArray添加对象,然后从其他视图中删除同一NSMutableArray中的对象吗?我试过了

 myappAppDelegate *appDelegate = (myappAppDelegate *)[[UIApplication sharedApplication] delegate];

但是当我尝试访问appDelegate的数组时它给了我null。如果有人可以给我任何想法或帮助链接或tutrorial。提前谢谢。

4 个答案:

答案 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;

这样你就可以初始化数组并正确使用它。