Нулевое значение при доступе к переменной в других классах (Combined Navigation & Tab Controller) - PullRequest
0 голосов
/ 05 марта 2012

У меня есть контроллер навигации, находящийся внутри контроллера панели вкладок, и всякий раз, когда я пытаюсь получить доступ к классу из класса в контроллере навигации, все мои значения возвращаются (ноль).

Вот как я пытаюсьсделать это.

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 равен (null).Если я попытаюсь получить доступ к переменной в AppDelegate из другого класса, который не связан с контроллером навигации, то он показывает отлично.Что мне не хватает?

Если вам нужно больше кода, я с радостью его предоставлю.

РЕДАКТИРОВАТЬ:

Для ясности я опубликую изменения кода здесь:

У меня есть делегат в моем AppDelegate.h

Как указал Леонардо, я только выделил и инициировал свой AppDelegate.Я изменил этот фрагмент на следующий:

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

, но все равно не пойдет, так как searchQueryM все еще (ноль).

Это то, что я делаю с searchQueryM

MasterViewController.h

@interface MasterViewController : UITableViewController
{
NSString *searchQueryM;
}

@property (nonatomic, strong) NSString *searchQueryM;

MasterViewController.m

@synthesize searchQueryM;

Я довольно новичок в Objective-C (а также в OO-программировании) и, вероятно, должен прочитать о нем книгу, но, похоже,для меня, как будто это не намного больше, чем это.Исправьте меня, если я ошибаюсь.

РЕДАКТИРОВАТЬ 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_

Если я наберу "asd" в текстовом поле searchField и выведу его с журналом, я получу "asd".}

1 Ответ

1 голос
/ 06 марта 2012

Почему вы выделяете initDelegate? AppDelegate должен быть доступен с:

[[UIApplication sharedApplication] delegate]

Мы должны увидеть, как вы обычно инициализируете searchQueryM, вы получаете нулевое значение, возможно, потому, что AppDelegate получает только выделенный объект и init, но логика, которая инициализирует его свойства, никогда не вызывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...