如何在ios中不使用AppDelegate访问全局数组

时间:2013-11-29 14:03:06

标签: ios iphone objective-c opencv objective-c++

我在我的一个项目中实施了Opencv。在opencv .mm文件中,我需要访问appdelegate对象以进行数组的全局访问,但它始终提供Linker Error(当我尝试导入{{ 1}}类)。所以我创建了一个AppDelegate类,但仍然无法访问作为NSObject的{​​{1}}创建的全局数组(我已导入了@property类.mm文件)。数组给出NSObject值。 那么我在哪里创建NSObject我可以在整个项目中访问数组?

我无法使用NULLArray。因为我想在该阵列中保存大量图像和视频链接,所以我不能使用NSUSerDefaults而我不想再次使用手机内存作为临时文件,因为我正在从中挑选图像DocumentDirectory,所以NSUserDefaults被丢弃,那么有什么方法可以创建全局数组并从Photolibrary文件即DocumentDirectory文件中访问它们?

5 个答案:

答案 0 :(得分:0)

请注意,Objective C是C的超集。因此,您可以在程序中使用常规C变量。我最喜欢的是为appDelegate创建一个全局变量。把它放在你的app delegate的.h文件中:

MyAppDelegateClass * appDelegate;

(将“MyAppDelegateClass”更改为appDelegate的类名)并将其放在app delegate的.m文件中的application:didFinishLaunchingWithOption:方法中:

    appDelegate = self;     // set universal global variable

现在只需#import你的app delegate的.h文件,并可以从任何地方访问你的appDelegate。

答案 1 :(得分:0)

你可以尝试创建一个单独的对象,并从任何地方访问它

答案 2 :(得分:0)

你可以将类设为UserdataSingleton,它会覆盖NSObject。您可以在整个应用程序中使用它来全局共享数据(对于您的案例数组)。此代码模板可以帮助您:

#import <Foundation/Foundation.h>

@interface UserDataSingleton : NSObject
{
    @private
    NSArray *globalArray;
}
+(UserDataSingleton *) getInstance;  
-(void)saveInUserDatasingletonWithArray:(NSArray *)array;  
-(NSDictionary *)getGlobalArray;

@end

和实现文件会是这样的:

#import "UserDataSingleton.h"  

@implementation UserDataSingleton  

static UserDataSingleton *userDataSingletonInstance;  


+(UserDataSingleton *) getInstance  
{ 

    if (userDataSingletonInstance == nil)   {
     userDataSingletonInstance = [[UserDataSingleton alloc] init]; 
}  
    return userDataSingletonInstance; 
}

-(void)saveInUserDatasingletonWithArray:(NSArray *)array 
{
    globalArray = array; 
}
-(NSDictionary *)getGlobalDictionary 
{ 
    return globalArray; 
} 
@end 

==================用法:

#import "UserDataSingleton.h"
#define USERDATASINGLETON (UserDataSingleton *)[UserDataSingleton getInstance]

......................你的代码......

 NSArray *this_IS_Array_Populated_here_For_Global_Access = [NSArray alloc] initWith....];

[USERDATASINGLETON saveInUserDatasingletonWithArray:this_IS_Array_Populated_here_For_Global_Access];//you put your array for global access. 

稍后在任何其他视图或视图控制器中你可以获得该全局数组,例如,假设你有YourViewController类:

NSMutableArray *yourArrayFromWebResponse = [USERDATASINGLETON getGlobalArray];

感谢

答案 3 :(得分:0)

您可以在代理中定义一个宏,如下所示:

#define sharedAppDelegate ((AppDelegate *)[UIApplication sharedApplication].delegate)

然后在你想要访问你的数组的类中导入你的AppDelegate类,样板文件将是:

#import AppDelegate.h

然后只使用:

NSArray *arrayYouWanted = [AppDelegate sharedAppDelegate].yourPropertyArrayName;

答案 4 :(得分:0)

如果要保留它,也可以将其存储在NSUserDefaults中。