我需要创建一个可由多个视图控制器访问的数组实例。它将包含将显示在表格视图中并由模块化视图创建然后显示在表格视图中的对象。在主视图控制器或 AppDelegate 类中为它创建@property 后,我无法弄清楚如何访问它。
问问题
176 次
5 回答
2
你应该做一个单例,在objective-c中推荐的方法是创建一个类并添加一个看起来像这样的方法:
+ (YourClass *)sharedYourClass
{
static dispatch_once_t onceToken;
static YourClass *sharedInstance;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
将数组作为属性放入您的类中。
//YourClass.h
@interface YourClass : NSObject
@property(nonatomic, strong)NSArray *yourArray;
+(YourClass *)sharedYourClass;
@end
在你想使用单例的每个类中,首先导入YourClass.h
然后使用它:
NSArray *arr = [YourClass sharedYourClass].yourArray;
[YourArray sharedYourClass].yourArray = [[NSArray alloc] init];
etc..
于 2013-10-24T19:51:31.123 回答
1
我所做的是将我想要共享的数据,在您的实例中的数组中,在 AppDelegate 中。然后我定义了一个应用程序委托遵守的协议。这让我可以在任何地方访问数据。例如,假设我有一个到处都想要的数组:
首先定义一个协议:
@protocol ApplicationState<NSObject>
@property(nonatomic, strong) NSArray* data;
@end
然后让你的应用委托符合它:
@interface AppDelegate : UIResponder <UIApplicationDelegate, ApplicationState>
@property (strong, nonatomic) UIWindow *window;
@property(nonatomic, strong) NSArray* data;
@end
那么读写这个共享对象就很简单了:
id<ApplicationState> appState = (id<ApplicationState>) [UIApplication sharedApplication].delegate;
appState.data = [[NSArray alloc] init];
于 2013-10-24T19:51:38.073 回答
0
我将假设您可以使数组的类从 NSObject 继承,然后从那里将其传递给 View Controller ...
于 2013-10-24T19:12:08.093 回答
0
您有两种方法可以做到这一点:
1.- 在主类上实例化 1 个 arra 并将引用传递给您需要的每个视图控制器。
2.- 制作一个单例类来保存数组并在您的项目中使用它。
于 2013-10-24T19:12:50.240 回答
0
首先创建一个这样的类
//GlobalDataClass.h
@interface GlobalDataClass : NSObject
@property(nonatomic,retain)NSArray *myArray;
+(GlobalDataClass*)getInstance;
@end
#import "GlobalDataClass.h"
//GlobalDataClass.m
@implementation GlobalDataClass
@synthesize myArray;
static GlobalDataClass *instance =nil;
+(GlobalDataClass *)getInstance
{
@synchronized(self)
{
if(instance==nil)
{
instance = [GlobalDataClass new];
}
}
return instance;
}
@end
然后你可以像这样在你的 viewControllers 中使用它:
-(void)viewDidLoad{
[super viewDidLoad];
self.dataObj = [GlobalDataClass getInstance];
NSLog(@"%@",self.dataObj.myArray);
}
希望能帮助到你!
于 2013-10-24T19:15:57.440 回答