我在我的一个项目中实施了Opencv
。在opencv
.mm文件中,我需要访问appdelegate
对象以进行数组的全局访问,但它始终提供Linker Error
(当我尝试导入{{ 1}}类)。所以我创建了一个AppDelegate
类,但仍然无法访问作为NSObject
的{{1}}创建的全局数组(我已导入了@property
类.mm文件)。数组给出NSObject
值。
那么我在哪里创建NSObject
我可以在整个项目中访问数组?
我无法使用NULL
和Array
。因为我想在该阵列中保存大量图像和视频链接,所以我不能使用NSUSerDefaults
而我不想再次使用手机内存作为临时文件,因为我正在从中挑选图像DocumentDirectory
,所以NSUserDefaults
被丢弃,那么有什么方法可以创建全局数组并从Photolibrary
文件即DocumentDirectory
文件中访问它们?
答案 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中。