一般来说 [UIApplication sharedApplication].keyWindow.rootViewController 会在 appDelegate 中初始化,并且整个应用运行过程中都不会变. 所以在很多地方需要用 presentModelViewController 方法时,用这个 rootViewController 是很方便的,因为它相当于一个全局变量,无需再申请.释放. 但是本人在使用过程中发现有 rootViewController 被改为 nil 的情况. 分析后发现…
UIWindow *window = [UIApplication sharedApplication].keyWindow; window 为nil的原因:在指定rootViewController之前,没有让window 先可视化 1.示例  为nil: self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.window.backgroundColor = [UIColor whit…
参考链接:https://www.cnblogs.com/henusyj-1314/p/11643189.html 结论1.在获取到window时最好使用[[UIApplication sharedApplication].delegate window]获取window2.不要在keywindow为nil的时候给window上添加代码,例如添加弹窗…
刚才调试的时候除了一些小问题,有一段代码要重用 NSString *key = @"CFBundleVersion"; // 取出沙盒中存储的上次使用软件的版本号 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *lastVersion = [defaults stringForKey:key]; // 取出当前版本号 NSString *currentVersion = [NSBun…
之前想要拿到app的窗口,我们通常的写法是: [UIApplication sharedApplication].keyWindow 这种写法之前一直也觉得是正确的,没什么问题,而且网上大多数的博客或者资料中也是这样写的,但是最近在项目,发现这样写是不安全的,如果应用程序没有跳转,这种写法还算是可行的,但是如果应用程序出现了跳转(分享跳转到其他APP,访问系统相册等),这时返回原APP,你会发现加载原窗口上的视图位置会发生明显偏移,查阅了一些资料,发现如果写成 [[[UIApplication…
应用中打开其他应用 我们来讨论一下,在iOS开发中,如何实现从app1打开app2. 基本的思路就是,可以为app2定义一个URL,在app1中通过打开这个URL来打开app2,在此过程中,可以传送一些参数.下面来讨论一下具体的实现过程. 1. 在app2的info.plist中定义URL,就是在文件中添加URL types一项.可按下图进行添加. 2. 在app1的代码中打开刚才定义的URL,代码如下: copy   NSURL *url = [NSURL URLWithString:@];…
iPhone应用程序是由主函数main启动,它负责调用UIApplicationMain函数,该函数的形式如下所示: int UIApplicationMain ( int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName ); 那么UIApplicationMain函数到底做了哪些事情呢?这个函数主要负责三件 事情: 1)从给定的类名初始化应用程序对象,也就是初始化UIApplicatio…
    iOS 应用程序之间(1)  在iOS开发中,经常需要调用其它App,如拨打电话.发送邮件等.UIApplication:openURL:方法是实现这一目的的最简单方法,该方法一般通过提供的url参数的模式来调用不同的App. 通过openURL方法可以调用如下应用: 调用谷歌地图(Google Maps) 调用邮件客户端(Apple Mail) 拨号(Phone Number) 调用短信(SMS) 调用浏览器(Safari Browser) 调用应用商店(AppStore) 调用谷歌地…
iPhone应用程序是由主函数main启动,它负责调用UIApplicationMain函数,该函数的形式如下所示: int UIApplicationMain ( int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName ); 那么UIApplicationMain函数到底做了哪些事情呢?这个函数主要负责三件 事情: 1)从给定的类名初始化应用程序对象,也就是初始化UIApplicatio…
// 正常程序退出后,会在几秒内停止工作: // 要想申请更长的时间,需要用到 // beginBackgroundTaskWithExpirationHandler // endBackgroundTask // 一定要成对出现 - (void)applicationDidEnterBackground:(UIApplication *)application { [self beginTask]; //在非主线程开启一个操作在更长时间内执行: 执行的动作 aa =0; _timer = [N…