0

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

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

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

4

4 回答 4

2

对于您的问题类型,我会使用单例。

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

appdelegate 也是一个单例,但如果您使用自己的单例,您可以减少一点编码行数。

于 2011-10-03T14:02:55.453 回答
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 类的实例。

于 2011-10-03T14:08:55.657 回答
1

AppDelegate 方法应该可以工作,您可能应该弄清楚它为什么不起作用,即使您使用单例也是如此。

获取appDelegate指针的语句似乎是正确的,所以我猜测指向数组的指针要么没有在你的myappDelegate类中设置(并保留),要么你一开始没有正确创建 AppDelegate 实例。

于 2011-10-03T14:59:59.443 回答
1

Singleton方法上添加这个

instance.arrGlobal = [[NSMutableArray alloc] init];

这边走:

@synchronized(self)    
{    
    if(instance==nil)    
    {    

        instance= [DataClass new];
        instance.arrGlobal = [[NSMutableArray alloc] init];
    }    
}    
return instance;

这样您就可以初始化阵列并正确使用它。

于 2013-06-18T14:08:55.410 回答