我有一个标签栏应用程序,我使用singleton类在我的应用程序中共享一些数据。在我的应用程序委托类didFinishLaunchingWithOptions方法中,我从服务器获取数据并将其存储在单例类中,我可以看到它已使用NSLog在我的单例类中正确存储。
但现在,当我试图在我的第二个标签栏中访问该数据时,单击它给我“EXC_BAD_ACCESS”。 我的viewDidLoad代码
- (void)viewDidLoad {
SingleTon *get = [SingleTon sharedInstanceHname];
result = [get getHname:result];
list = [[NSArray alloc] initWithArray:result];
NSLog(@"List%@", list);
[super viewDidLoad];
}
我可以看到错误(“EXC_BAD_ACCESS”)在行
list = [[NSArray alloc] initWithArray:result];
我想使用此数据填充第二个标签栏视图...任何建议如何解决此错误????
sharedInstance方法
static SingleTon *_sharedInstanceHname;
- (id) init
{
if (self = [super init])
{
// custom initialization
//memset(board, 0, sizeof(board));
hname = [[NSMutableArray alloc] init];
index =1;
}
return self;
}
+ (SingleTon *) sharedInstanceHname
{
if (!_sharedInstanceHname)
{
_sharedInstanceHname = [[SingleTon alloc] init];
}
return _sharedInstanceHname;
}
- (NSMutableArray *) getHname:(NSMutableArray *)x
{
return hname;
}
答案 0 :(得分:0)
getHname返回的消息是什么?
我怀疑'结果'不是NSArray的成员。
另一个想法可能是'结果'是零。我不认为方法initWithArray:就像给出了一个零值。
答案 1 :(得分:0)
sharedInstanceHname
或gHname
是否会返回自动释放的对象?您可能需要保留它们以供您使用,如下所示:
- (void) viewDidLoad
{
SingleTon *get = [SingleTon sharedInstanceHname];
[get retain];
result = [get gHname:result];
[result retain];
[get release];
list = [[NSArray alloc] initWithArray:result];
[result release];
[super viewDidLoad];
}
我不会使用上面的代码;它仅用于向您展示自动释放和保留/释放所有权的概念。找出sharedInstanceHname
或gHname
返回的内容,然后进行相应的编程。
编辑:更重要的是,SingleTon类中的sharedInstanceHname
方法是否保留该方法返回的对象的所有权?如果它确实返回一个自动释放的对象,它不是严格意义上的Singleton对象,而是一个排序的构造函数。