2012-03-05 6 views
0

私はタブバーコントローラの中にあるナビゲーションコントローラを持っていて、ナビゲーションコントローラ内のクラスからクラスにアクセスしようとすると、 )。他のクラスの変数にアクセスするときのヌル値

これは私がそれをやろうとしている方法です。

AppDelegate.h

@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate> { 
NSString *searchQueryA; 
} 

@property (strong, nonatomic) NSString *searchQueryA; 

ThirdViewController.h

#import "MasterViewController.h" 
#import "AppDelegate.h" 

@class MasterViewController; 

@interface ThirdViewController : UIViewController { 
code 
} 

@property (strong, retain) MasterViewController *masterViewController; 

ThirdViewController.m

- (IBAction)showDetail:(id)sender { 
AppDelegate *appDelegate = [[AppDelegate alloc] init]; 
appDelegate.searchQueryA = _searchField.text; 
masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil]; 
[self.navigationController pushViewController:masterViewController animated:YES]; 
} 

MasterViewController.h

#import "AppDelegate.h" 
@interface MasterViewController : UITableViewController 
{ 
NSString *searchQueryM; 
} 

@property (nonatomic, strong) NSString *searchQueryM; 

MasterViewController.m

AppDelegate *appDelegate = [[AppDelegate alloc] init]; 
searchQueryM = appDelegate.searchQueryA; 

NSLog(@"%@", searchQueryM); 

し、ログに私はsearchQueryMは(ヌル)であることがわかります。別のクラスからAppDelegateの変数にアクセスしようとすると、ナビゲーションコントローラには関係なく、完全に正常に表示されます。私は何が欠けていますか?

もっとコードを表示する必要がある場合は、私はそれを提供していただきたいと思います。

EDIT:

読みやすさのために私はここで、コードの変更を投稿します:

をレオナルドだけalloc'd Iを指摘し、init'dとして、私は私のAppDelegate.h

にデリゲートを持っています私のAppDelegate。このスニペットを次のように変更しました:

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
searchQueryM = appDelegate.searchQueryA; 

まだ検索クエリはまだ(null)です。

これはsearchQueryM

MasterViewController.h

@interface MasterViewController : UITableViewController 
{ 
NSString *searchQueryM; 
} 

@property (nonatomic, strong) NSString *searchQueryM; 

と私は何をすべきかであるMasterViewController.m

@synthesize searchQueryM; 

私はObjective-Cのにかなり新たなんだ(だけでなく、OO-プログラミング)、おそらくその本を読んでいるはずですが、それ以上のことはないと思うようです。私が間違っていれば私を修正してください。

EDIT 2

ThirdViewController.h

@interface ThirdViewController : UIViewController { 
UITextField *_searchField; 
} 

@property (nonatomic, strong) IBOutlet UITextField *searchField; 

ThirdViewController.m

@synthesize searchField = _searchField; 

... 

- (IBAction)showDetail:(id)sender { 
_code_ 
NSLog(@"%@", searchField.text); 
_code_ 

私は私がログにsearchFieldテキストフィールドと出力にそれを "ASD" と入力した場合取得 "asd"。 }

答えて

1

なぜAppDelegateを初期化するのですか? AppDelegateを使ってアクセスする必要があります。

[[UIApplication sharedApplication] delegate] 

私たちは、あなたが正常にsearchQueryMを初期化する方法を確認する必要があり、あなたはAppDelegateにのみ割り当てられますおそらくので、nullを取得し、initが、そのプロパティを初期化する論理は呼ばれることは決してありませんされています。

+0

私を訂正してくれてありがとう、私はその1つを台無しにしたようだ、しかし、まだ私の問題を解決しません。 AppDelegate * appDelegate =(AppDelegate *)[[UIApplication sharedApplication] delegate]; \t searchQuery = appDelegate.searchQuery; 上記のコードに変更しても、null値が得られます。私は私のAppDelegate.hのを持っています –

+0

uhm、IBOutletの_searchFieldですか?もしそうなら、ThirdViewControllerのInterfaceBuilderに接続しましたか?ブレークポイントまたはLogステートメントをshowDetailメソッドに入れて、それ以降適切な値を取得しているかどうかを確認してください。 – Leonardo

+0

_searchFieldはIBOutletです。接続されており、ログに記録されるときに適切な値が取得されます。 _searchFieldのコードを元の投稿に投稿します。 –

関連する問題