我有一个位于标签栏控制器中的导航控制器,每当我尝试从导航控制器中的类访问一个类时,我所有的值都返回(空)。

这就是我试图做到的。

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中的变量,而该类与导航控制器无关,那么它显示得很好。我想念什么?

如果您需要查看更多代码,我们很乐意提供。

编辑:

为了清晰起见,我将在此处发布代码更改:

我的AppDelegate.h中有代表

正如莱昂纳多指出的那样,我仅分配和初始化我的AppDelegate。我将该代码段更改为:

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


但仍然没有进展,因为searchQueryM仍然为(null)。

这就是我对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_


如果我在searchField文本字段中键入“ asd”,并与日志一起输出,则会得到“ asd”。
     }

最佳答案

为什么要分配init您的AppDelegate?
应使用以下命令访问AppDelegate:

[[UIApplication sharedApplication] delegate]


我们应该看到您通常如何初始化searchQueryM,您将得到null,这可能是因为AppDelegate仅获得了分配和初始化,但从未调用过初始化其属性的逻辑。

关于iphone - 访问其他类中的变量时的空值(组合导航和选项卡 Controller ),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9573101/

10-13 09:03