从每个视图控制器访问NSArray

时间:2014-06-22 20:49:20

标签: ios objective-c uiviewcontroller nsarray

我有一个非常大的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);

    }];
}

2 个答案:

答案 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将在所有控制器,模型,视图等中可用。

如果有帮助,请告诉我。