2011-01-21 11 views
1

私はタブバーアプリケーションを持っています。私はシングルトンクラスを使用してアプリケーションからいくつかのデータを共有しています。 didFinishLaunchingWithOptionsメソッドのアプリケーションデリゲートクラスでは、サーバーからデータを取得してシングルトンクラスに格納しています。NSLogを使用してシングルトンクラスに正しく格納されていることがわかります。タブバで動作しないシングルトンクラスiphoneアプリケーション

しかし、今は、2番目のタブバーでそのデータにアクセスしようとしているときに、「EXC_BAD_ACCESS」をクリックします。 私はそのエラー(「EXC_BAD_ACCESS」)を見ることができます

- (void)viewDidLoad { 

SingleTon *get = [SingleTon sharedInstanceHname]; 
result = [get getHname:result]; 
list = [[NSArray alloc] initWithArray:result]; 
NSLog(@"List%@", list); 


[super viewDidLoad]; 
} 

私のviewDidLoadコードはラインである

list = [[NSArray alloc] initWithArray:result]; 

私は2番目のタブバー・ビューに移入するために、このデータを使用したい...任意の提案方法このエラーを解決しますか?

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

あなたの '+ sharedInstanceHname'メソッドを投稿できますか? –

+0

私はシングルトンクラスのsharedInstanceHnameメソッドを上記の元の質問と結果のviewDidLoadに投稿しました。NSMutableArrayは – AKG

答えて

0

メッセージがgetHname何を返している ?

「result」はNSArrayのメンバーではないと思われます。

「結果」はおそらくnilであると考えられます。私はメソッドinitWithArray:nilの値が与えられているとは思わない。

+0

ですがnullになっていますが、nullの理由がわかります。 – AKG

+0

これで、前の行の詳細を知ることができます。 hnameはnil以外の何かに初期化されていますか? – martinws

+0

はい、私のシングルトンクラスでは、デフォルト値= "hello"に初期化されています。それでも、誰かが、私のシングルトンのsharesInstanceメソッドが、ログで見ることができるappdelegateクラスのhnameを初期化するために使用されるので、nullの理由を教えてもらえますか? – AKG

0

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

私は上記のコードを使用しません。 autoreleaseと所有権を保持/解放するという概念を実証する目的のみに役立ちます。 sharedInstanceHnameまたはgHnameが何を返すかを把握し、それに応じてプログラムします。

EDIT:さらに重要なことに、SingleTonクラスのsharedInstanceHnameメソッドは、そのメソッドから返されたオブジェクトの所有権を保持していますか?自動解放されたオブジェクトを返す場合、厳密にはSingletonオブジェクトではなく、ソートのコンストラクタです。

+0

Alan:私は元の質問をsharedinstanceHnameメソッドで編集しました...オブジェクトの所有権を保持することによって何を意味するのか教えてください。あなたは私のコードを見て助けることができます。 – AKG

関連する問題