Singleton类不使用标签栏iphone应用程序

时间:2011-01-21 00:43:43

标签: iphone uitabbarcontroller singleton

我有一个标签栏应用程序,我使用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;
    }

2 个答案:

答案 0 :(得分:0)

getHname返回的消息是什么?

我怀疑'结果'不是NSArray的成员。

另一个想法可能是'结果'是零。我不认为方法initWithArray:就像给出了一个零值。

答案 1 :(得分:0)

sharedInstanceHnamegHname是否会返回自动释放的对象?您可能需要保留它们以供您使用,如下所示:

- (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];
}

我不会使用上面的代码;它仅用于向您展示自动释放和保留/释放所有权的概念。找出sharedInstanceHnamegHname返回的内容,然后进行相应的编程。

编辑:更重要的是,SingleTon类中的sharedInstanceHname方法是否保留该方法返回的对象的所有权?如果它确实返回一个自动释放的对象,它不是严格意义上的Singleton对象,而是一个排序的构造函数。