私はタブバーコントローラの中にあるナビゲーションコントローラを持っていて、ナビゲーションコントローラ内のクラスからクラスにアクセスしようとすると、 )。他のクラスの変数にアクセスするときのヌル値
これは私がそれをやろうとしている方法です。
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 =(AppDelegate *)[[UIApplication sharedApplication] delegate]; \t searchQuery = appDelegate.searchQuery; 上記のコードに変更しても、null値が得られます。私は私のAppDelegate.hのを持っています –
uhm、IBOutletの_searchFieldですか?もしそうなら、ThirdViewControllerのInterfaceBuilderに接続しましたか?ブレークポイントまたはLogステートメントをshowDetailメソッドに入れて、それ以降適切な値を取得しているかどうかを確認してください。 – Leonardo
_searchFieldはIBOutletです。接続されており、ログに記録されるときに適切な値が取得されます。 _searchFieldのコードを元の投稿に投稿します。 –