2009-06-01 11 views
0

私はAppdelegateでいくつかのクラスを初期化しましたが、このクラスインスタンスのAppdelegateフォームを別のクラスで取得すると、 "新鮮な"状態になります。別のクラスへの参照を正しく取得するにはどうすればよいですか?

インタフェース:

@property (nonatomic, retain) DataController *dataController; 

実装:私はAppDelegateで、以下のいる

@synthesize dataController; 
- (id)init { 
    if (self = [super init]) { 
     DataController *controller = [[DataController alloc] init]; 
     self.dataController = controller; 
     [controller release]; 
     NSLog(@"items: %d",[self.dataController numberOfItems]); 
    } 
    return self; 
} 

をこの時点でDataControlelrクラスの負荷では、フォームのデータベースオブジェクト。ログ出力は「items:10」と表示されます。

私はDataControllerを使用する必要があるTableViewControllerを持っています。

TableViewControllerヘッダー:

@interface TableViewController : UITableViewController { 
    DataController *dataController; 
} 

@property (retain) DataController *dataController; 
@end 

実装:ここ

-(id)init{ 
    if (self =[super init]) { 
     DataController *dc =[(AppDelegate *)[[UIApplication sharedApplication] delegate] dataController]; 
     [dc retain]; 
     dataController = dc; 
     NSLog(@"items: %d",[self.dataController numberOfItems]); 
    } 
    return self; 
} 

それは常にDataControllerが0のアイテムを持っていることを言います。 「新鮮な」状態。そのクラスを割り当てることたて何とかDataControllerを初期化するための基準を作成するように思え0

:10件の

アイテム:

ログ出力は常に

アイテムですか!

別のクラスを正しく参照するにはどうすればよいですか?

ありがとうございました。

答えて

1

最初に確認することは、第二のクラスでdc変数はまた、役に立つかもしれません「復帰」0

に上と呼ばれる任意の方法を引き起こすことnil--ないことを確認することですこれらのメソッドの両方からアプリケーションデリゲートのアドレスをプリントアウトする。ちょうど-initメソッドがそのクラスの第2のインスタンスを間違って割り当てられた結果で、正規バージョンが同じ方法で初期化されていないまたは-initWithCoder:などを使用していた)

nibファイル内で作成または割り当てられたオブジェクトを初期化するための便利な方法の1つは、-awakeFromNibを使用して、ほとんどの初期化タスクを実行します。その結果、アプリケーションデリゲートは-applicationDidFinishLaunching:メソッドに対応して状態を設定できます。この場合、AppDelegateクラスの2番目のインスタンスがどこかに割り当てられている場合は、という実際にがアプリケーションの代理人として設定されたインスタンスのみが-applicationDidFinishLaunching:となります。

デバッガをステップ実行し、コールスタックを調べると、何かが起こっていない場合に表示されます。

0

dataController = dcの割り当てがTableViewControllerに問題がありますか?あなたのログステートメントでは、self.dataControllerを使用します。その上の代入はself.dataController = dcですか?

+0

申し訳ありませんが間違って貼り付けられました。それはself.datacontroller = dcです。 違いはありません。 – Rod

0

私は見つけました。タンクをジムに!

-initから-awakefromnibに割り当てを移動し、DataControllerが有効になりました。

私の間違いは、コードを最初に-viewDidLoadと-viewWillAppearに入れた後に間違っていたことです。私は、-initが割り当ての場所であると思っていました。

関連する問題