【发布时间】:2014-07-02 14:57:25
【问题描述】:
我有一个名为GlobalArray 的类,它是一个NSObject。它有一个名为globalData 的NSArray 属性。
我正在将数据传递到我的ViewControllerOne.m 内的globalData,它运行良好,我可以在控制台中打印日志。问题是,我无法在ViewControllerTwo.m 中检索这些数据。
GlobalArray.h
#import <Foundation/Foundation.h>
@interface GlobalArray : NSObject
@property (nonatomic, retain) NSArray *globalData; // why retain?
GlobalArray.m
#import "GlobalArray.h"
@implementation GlobalArray
- (id) init
{
self = [super init];
if(self)
{
self.globalData = [[NSArray alloc] init];
}
return(self);
}
ViewControllerOne.m(GlobalArray.h 导入到 .h)
- (void)viewWillAppear:(BOOL)animated {
[PubNub requestHistoryForChannel:my_channel from:nil to:nil limit:100 reverseHistory:NO withCompletionBlock:^(NSArray *message, PNChannel *channel, PNDate *fromDate, PNDate *toDate, PNError *error) {
GlobalArray *fromHistory = [[GlobalArray alloc] init];
fromHistory.globalData = message;
NSLog(@"TEST LOG 1 %@", fromHistory.globalData);
}];
}
我尝试以这种方式在 ViewControllerTwo.m 中检索它:(已导入 ViewController.h 和 GlobalArray.h)
-(void) viewWillAppear:(BOOL)animated {
GlobalArray *history = [[GlobalArray alloc] init];
NSArray *sampleArr = [[NSArray alloc] init];
sampleArr = history.globalData;
NSLog(@" TEST LOG2 %@", sampleArr);
}
但是 TEST LOG2 是空的。我想我错过了 ViewControllerTwo.m 中的某些内容,但无法弄清楚,对我来说这似乎是正确的。
【问题讨论】:
-
那些
GlobalArray对象是在本地分配的,在这些方法之外是不可见的。您想要一个单例模式,但是,您需要先了解有关变量范围的更多信息。 -
如果您希望您的
GlobalArray在您的整个应用程序中可用,您必须将其转换为单例。 -
@trojanfoe 我不想要一个单例,在我的情况下这不是一个好的解决方案。我只需要在另外两个视图控制器中访问这个数组。
-
我在这里说明了为什么要避免单身:stackoverflow.com/questions/24477242/…
-
将数据也传递给中间控制器,顺便说一句,您的用例(我正在阅读另一篇文章)我认为单例是最优雅的解决方案。文章声明避免滥用单例,而不是全部避免。
标签: ios objective-c nsobject