Singleton类不适用于选项卡栏iphone应用程序

Singleton类不适用于选项卡栏iphone应用程序,iphone,uitabbarcontroller,singleton,Iphone,Uitabbarcontroller,Singleton,我有一个选项卡栏应用程序,我使用singleton类通过我的应用程序共享一些数据。在DidfishLaunchWithOptions方法中的应用程序委托类中,我从服务器获取数据并将其存储在singleton类中,并且可以看到它使用NSLog正确存储在singleton类中 但现在,当我试图访问我的第二个选项卡栏中的数据时,单击它会给我“EXC_BAD_access”。 我的viewDidLoad代码 - (void)viewDidLoad { SingleTon *get = [Single

我有一个选项卡栏应用程序,我使用singleton类通过我的应用程序共享一些数据。在DidfishLaunchWithOptions方法中的应用程序委托类中,我从服务器获取数据并将其存储在singleton类中,并且可以看到它使用NSLog正确存储在singleton类中

但现在,当我试图访问我的第二个选项卡栏中的数据时,单击它会给我“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];
我想使用此数据填充第二个选项卡栏视图…有没有解决此错误的建议

份额法

 static SingleTon  *_sharedInstanceHname;

 - (id) init
 {
if (self = [super init])
{
    // custom initialization
    //memset(board, 0, sizeof(board));
    hname = [[NSMutableArray alloc] init];
    index =1;
}
return self;
}


getHname返回的消息是什么

我怀疑“结果”不是NSArray的成员


另一个想法是,“结果”可能为零。我不认为initWithArray:like方法被赋予了一个nil值。

是否
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
方法是否保留该方法返回的对象的所有权?如果它确实返回一个自动释放的对象,严格来说它不是一个单例对象,而是某种构造函数。

你能发布你的
+sharedInstanceHname
方法吗?我已经在原始问题中发布了我的单例类的sharedInstanceHname方法,上面viewDidLoad中的结果是NSMutableArrayresult为null,但是我想了解它为空的原因。那么你能提供前一行的更多信息吗。hname初始化为非nil的值。是,在我的singleton类中,它已初始化为默认值=“hello”。即使这样,有人能告诉我它为空的原因吗?因为我的singleton sharesInstance方法用于初始化appdelegate类中的hname,我可以在日志中看到。我可以假设初始化是在init中完成的吗?此外,_sharedInstanceHname在某处声明,并在SingleTon实现文件中初始化为static SingleTon*_sharedInstanceHname=nil;我能做的就是你提供的。如果结果为nil,数组将崩溃,我唯一看到的错误是_sharedInstanceHname未正确初始化为nil。如果您不初始化它,那么有时它会正常工作,而有时它不会。艾伦:我用sharedinstanceHname方法编辑了我的原始问题……你能告诉我保留对象所有权是什么意思吗?您可以通过查看我的代码来帮助我。
- (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];
}