我有一个非常大的NSArray
,我必须在几个视图控制器中使用。我从服务器获取数据,我不想在用户打开新视图时下载它。
那么如何将其定义为“全局变量”呢?
我可以用segues做到这一点,但没有它们就无法工作。我试图在dataToDestinationView
中声明一个名为DestinationViewController
的数组,然后将其导入self.arrayToExport
所在的视图并添加上面的行,但不起作用。我错过了什么吗?
DestinationViewController *dataToNew = [DestinationViewController alloc]init];
dataToNew.dataToDestinationView = self.arrayToExport;
我在AppDelegate中尝试更新:
AppDelegate.h
@property (nonatomic, strong) PNChannel *myChannel;
AppDelegate.m
[PubNub requestHistoryForChannel:self.myChannel from:nil to:nil limit:100 reverseHistory:NO withCompletionBlock:^(NSArray *contentArray, PNChannel *channel, PNDate *fromDate, PNDate *toDate, PNError *error) {
+ (NSArray *)mySharedArray
{
static NSArray *sharedArray = nil;
if (sharedArray)
return sharedArray;
sharedArray = contentArray;
return sharedArray;
}
}];
在这种情况下,我收到两个错误:Use of undeclared identifier 'self'
和Expected identifier or '('
。我不明白,因为self.myChannel在.h中声明,我在其他地方使用相同的块而没有标识符问题。
第二次更新
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// [self.window makeKeyAndVisible];
[PubNub setDelegate:self];
PFUser *currentChannel = [PFUser currentUser];
self.myChannel = [PNChannel channelWithName:currentChannel.username
shouldObservePresence:YES];
}
- (void)getMessage {
[PubNub requestFullHistoryForChannel:self.myChannel withCompletionBlock:^(NSArray *contentArray, PNChannel *channel, PNDate *fromDate, PNDate *toDate, PNError *error) {
+ (NSArray *)mySharedArray
{
static NSArray *sharedArray = nil;
if (sharedArray)
return sharedArray;
sharedArray = contentArray;
return sharedArray;
}
NSLog(@"mokus katona %@", contactArray);
}];
}
答案 0 :(得分:2)
在你的app委托中,声明一个静态变量,以及一个读取它的方法:
static NSArray *_message = nil;
@implementation AppDelegate
+ (NSArray *)message
{
if (_message)
return _message;
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
[appDelegate getMessage];
return nil;
}
- (void)getMessage {
[PubNub requestFullHistoryForChannel:self.myChannel withCompletionBlock:^(NSArray *contentArray, PNChannel *channel, PNDate *fromDate, PNDate *toDate, PNError *error) {
NSLog(@"mokus katona %@", contactArray);
_message = contactArray;
}];
}
@end
答案 1 :(得分:-1)
也许这可以帮到你。
在您的pch文件( #project -Prefix.pch)中,您可以创建全局变量,可从所有空格中获取。看下面
#ifdef __OBJC__
NSArray *myArray;
#endif
在您的应用委托中,在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
中,您可以使用此类服务器数据填充数组
[PubNub requestFullHistoryForChannel:self.myChannel withCompletionBlock:^(NSArray *contentArray, PNChannel *channel, PNDate *fromDate, PNDate *toDate, PNError *error) {
NSLog(@"mokus katona %@", contactArray);
myArray = contactArray;
}];
现在这只是一次加载,myArray
将在所有控制器,模型,视图等中可用。
如果有帮助,请告诉我。