是否可以从 AppDelegate 获取 NSArray?
Posted
技术标签:
【中文标题】是否可以从 AppDelegate 获取 NSArray?【英文标题】:Is it possible to get a NSArray from AppDelegate? 【发布时间】:2016-07-14 07:08:05 【问题描述】:是否可以从我的 AppDelegate 获取 NSArray?我需要将一个数组发送到其他类。该数组是在我的 AppDelegate 中生成的。谢谢!
【问题讨论】:
是的,有可能。你知道什么是财产吗?你用过[UIApplicaton sharedApplication].delegate
吗?
是的。它是可能的
没有还没用过
那怎么办? @HariKrishnan.P
你能检查我的答案吗
【参考方案1】:
首先你应该alloc
和init
在 AppDelegate.h 文件中
@property(nonatomic,retain)NSArray *books;
在 AppDelegate.m 文件中你的数组,然后你可以在其中添加对象。
_books = [[NSArray alloc]initWithObjects:@"test",@"test", nil];
您应该像这样在BooksDetailViewController
中创建 AppDelegate 实例,
在.h文件中
AppDelegate *appDelegate;
在.m文件中
appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
现在你可以像这样访问你的数组了,
NSLog(@"Test Log :%@",appDelegate.books);
输出:
2016-07-14 13:04:08.211 Gridz[2490:39240] Test Log :(
test,
test
)
【讨论】:
假设我的 AppDelegate 中有一个 NSArray *books。为什么我无法在 appDelegate.books 中访问它?我遗漏了一些东西,比如将书籍公之于众之类的? 你有没有在appdelegate文件中设置属性【参考方案2】:AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
现在您可以使用任何属性或方法,例如:
[appDelegate myProperty]
或 [appDelegate myMethod]
希望对你有帮助
【讨论】:
假设我的 AppDelegate 中有一个 NSArray *books。为什么我无法在 [appDelegate 图书] 中访问它我错过了一些东西,比如将图书设置在公共场所之类的? 确保您的数组应在 AppDelegate.h 文件中声明为属性,以便在类外访问。【参考方案3】:可以从 AppDelegate 获取 NSArray 到其他类。
AppDelegate.h
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (nonatomic, strong) UIWindow *window;
@property (nonatomic, strong) ViewController *viewController; //For Xib
@property (nonatomic, strong) NSArray *arrayObjects;
@end
AppDelegate.m
#import "AppDelegate.h"
#import "ViewController.h"
@implementation AppDelegate
@synthesize arrayObjects;
由于我使用的是Xib,所以我在下面的方法中设置了根视图控制器。如果你使用stroy board,只添加NSArray对象就足够了。不需要设置根视图控制器。
//For XIB
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
arrayObjects = [[NSArray alloc]initWithObjects:@"Steve",@"jobs",@"Tim",@"Cook",nil];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
self.window.rootViewController = navController;
[navController setNavigationBarHidden:YES];
[self.window makeKeyAndVisible];
return YES;
//For Storyboard
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
arrayObjects = [[NSArray alloc]initWithObjects:@"Steve",@"jobs",@"Tim",@"Cook",nil];
return YES;
然后在 ViewController.m 中
也可以在 ViewController.m 中导入 AppDelegate
#import "ViewController.h"
#import "AppDelegate.h"
@interface ViewController ()
@end
@implementation ViewController
现在在 viewDidLoad 方法中
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
AppDelegate *delegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
NSLog(@"The app delegate NSArray Objects are - %@",delegate.arrayObjects);
NSLog 结果是
The app delegate NSArray Objects are - (
Steve,
jobs,
Tim,
Cook
)
【讨论】:
以上是关于是否可以从 AppDelegate 获取 NSArray?的主要内容,如果未能解决你的问题,请参考以下文章
从 AppDelegate 中的 ViewController 获取参数。
Swift:从 AppDelegate 中的 UNTextInputNotificationAction 获取内容