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