标签: uiapplicationdelegate

ApplicationWillTerminate在iOS 4.0中

在iOS 4.0中没有调用applicationWillTerminate委托方法当我点击Home按钮时,我看到applicationWillResignActive和applicationDidEnterBackground委托方法被调用.

 - (void)applicationWillResignActive:(UIApplication *)application
{
  NSLog(@"Application Did Resign Active");
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
  NSLog(@"Application Did Enter Background");
}
Run Code Online (Sandbox Code Playgroud)

当我双击主页按钮并再次启动应用程序时,我发现applicationWillEnterForeground和applicationDidBecomeActive委托方法被调用.

 - (void)applicationWillEnterForeground:(UIApplication *)application
{
  NSLog(@"Application Will Enter Foreground");
}



- (void)applicationDidBecomeActive:(UIApplication *)application
{
  NSLog(@"Application Did Become Active");
}
Run Code Online (Sandbox Code Playgroud)

但我想知道何时调用applicationWillTerminate委托方法,在那里我做一些DB /文件备份例程.

- (void)applicationWillTerminate:(UIApplication *)application{

}
Run Code Online (Sandbox Code Playgroud)

我甚至试图点击减号并删除在后台运行的应用程序,但它仍然没有调用任何委托方法.

有任何想法吗 ???

iphone uiapplicationdelegate ios4

36
推荐指数
1
解决办法
2万
查看次数

UIApplication sharedApplication - keyWindow是nil?

我想将CGPoint从我的UIView转换为UIWindow坐标,并意识到UIApplication keyWindow总是为零; 为什么是这样?

我尝试过convertPoint:toView:UIView 的方法.

请在Xcode模板(View应用程序)中查看我在视图控制器中尝试的示例代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    UIView *test =  [[UIView alloc] initWithFrame:CGRectMake(40,40,250,250)];
    [test setBackgroundColor:[UIColor redColor]];
    [self.view addSubview:test];

    CGPoint p = CGPointMake(100, 100);
    CGPoint np;

    np = [test convertPoint:p toView:[[UIApplication sharedApplication] keyWindow]];
    NSLog(@"p:%@ np:%@", NSStringFromCGPoint(p), NSStringFromCGPoint(np));

    AppDelegate *appDel =  (AppDelegate *)[UIApplication sharedApplication].delegate;

    np = [test convertPoint:p toView:[appDel window]];
    NSLog(@"p:%@ np:%@", NSStringFromCGPoint(p), NSStringFromCGPoint(np));

    np = [test convertPoint:p toView:nil];
    NSLog(@"p:%@ np:%@", NSStringFromCGPoint(p), NSStringFromCGPoint(np));

    [test release];

    if(![[UIApplication sharedApplication] keyWindow])
        NSLog(@"window was nil");
}
Run Code Online (Sandbox Code Playgroud)

我得到:

p:{100, 100} np:{100, …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c uiapplication uiapplicationdelegate

32
推荐指数
3
解决办法
2万
查看次数

在applicationDidEnterBackground之前显示视图或启动画面(以避免活动视图截图)

我的应用程序中有保密信息,所以当应用程序即将移动到后台时,我想用启动画面隐藏它们.

我在iOS6上运行应用程序.

我试图显示视图,applicationWillResignActive但问题是它显示启动屏幕,即使用户滑动控制面板,例如.我希望它只在应用程序移动到后台时显示.

我尝试显示我的splashScreen,applicationDidEnterBackground但它需要screenShot才能在动画期间恢复时显示信息.

这就是我想要的精神:

- (void)applicationDidEnterBackground:(UIApplication *)application {
    [_window addSubview:__splashController.view];
}
Run Code Online (Sandbox Code Playgroud)

screenshot background uiapplicationdelegate ios ios7

32
推荐指数
2
解决办法
2万
查看次数

如何检测代码是否在主应用程序或应用程序扩展目标中运行?

如果您在App扩展程序内运行,是否有人知道您如何从代码中检测到?

我有一个应用程序,它在应用程序和扩展程序之间共享类.应用程序代码使用,[UIApplication sharedApplication]但这不能从扩展中获得,因此它不会编译说:

'sharedApplication'不可用:iOS(App Extension)不可用

因此,我需要一种方法来检测我是否在扩展中并使用替代方案,sharedApplication如果是这种情况.

uiapplicationdelegate ios ios-app-extension

32
推荐指数
5
解决办法
1万
查看次数

暂停后iPhone背景中的iPhone GPS永远不会恢复

我的应用程序需要在后台跟踪用户位置更改,并且只要用户移动就可以正常工作.当用户CLLocationManager在10-20分钟左右停止并暂停时.此通知表明:

-(void)locationManagerDidPauseLocationUpdates:(CLLocationManager *)manager{}
Run Code Online (Sandbox Code Playgroud)

这对我也没关系.太棒了,我节省了一些电池等

问题是CLLocationManager当用户再次开始移动时永远不会醒来,并且在我将应用程序放到前台之前永远不会触发委托方法(获取活动):

//Never called back after CLLocationManager pauses:
-(void)locationManagerDidResumeLocationUpdates:(CLLocationManager *)manager{}
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{}
Run Code Online (Sandbox Code Playgroud)

为什么locationManagerDidResumeLocationUpdates在设备重新开始移动后从未调用过?GPS也不应自动恢复(因为自动暂停)? 有没有办法在没有用户互动的情况下恢复GPS?

应用程序在Info.plist文件中声明如下:

在此输入图像描述

我的CLLocationManager设置是:

locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
[locationManager setActivityType:CLActivityTypeFitness];
//I WANT pauses to save some battery, etc... That is why following line is commented out (default)
 //[locationManager setPausesLocationUpdatesAutomatically:NO];
 locationManager.distanceFilter = kCLLocationAccuracyNearestTenMeters;
 locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
 [locationManager startUpdatingLocation];
Run Code Online (Sandbox Code Playgroud)

objective-c core-location uiapplicationdelegate cllocationmanager ios

29
推荐指数
1
解决办法
9324
查看次数

Cocoa-Touch - 代表混淆

我刚刚开始运行Xcode 4.2.1和iOS5 SDK的新项目.该项目是使用ARC设置的.我正在尝试将AppDelegate设置为UITabBarController的委托,[tabBarController setDelegate:self];如果我这样做,我会收到一条警告消息:

warning: Semantic Issue: Sending 'AppDelegate *const __strong' to parameter of incompatible type 'id<UITabBarControllerDelegate>'
Run Code Online (Sandbox Code Playgroud)

好吧,我设置我的AppDelegate以符合UITabBarControllerDelegate

@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>
Run Code Online (Sandbox Code Playgroud)

好的,警告消失了.

我现在得到另一个错误.在一个视图控制器中,我希望得到一个AppDelegate,所以我这样做:AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];但这会发出警告说:

warning: Semantic Issue: Initializing 'AppDelegate *__strong' with an expression of incompatible type 'id<UIApplicationDelegate>'
Run Code Online (Sandbox Code Playgroud)

但如果我删除我的AppDelegate符合UITabControllerDelegate协议我的第二个警告消失.

非常奇怪的行为,是什么让Cocoa专家?

cocoa-touch delegates objective-c uiapplicationdelegate automatic-ref-counting

27
推荐指数
1
解决办法
9862
查看次数

applicationDidBecomeActive被调用两次

applicationDidBecomeActive:第一次启动应用程序时,我的app delegate方法被调用两次.我有一部分代码,我只想执行一次而且我已经投入了applicationDidBecomeActive:

我该怎么办?

iphone cocoa-touch objective-c uiapplicationdelegate ios

22
推荐指数
3
解决办法
1万
查看次数

对应应用程序:openURL:sourceApplication:annotation:

iOS SDK 4.2包含一个UIApplicationDelegate名为的新方法application:openURL:sourceApplication:annotation:.它是application:handleOpenURL:对调用应用程序的替代和提供更多信息:我们不仅获取调用应用程序的包标识符,而且还在annotation参数中,

源应用程序提供的属性列表对象,用于将信息传递给接收应用程序.

太棒了,这应该为多个第三方应用之间更直接的互动提供了很多机会!

唯一的问题是:如何在调用应用程序一侧调用此机制?-[UIApplication openURL:]似乎没有改变,也没有提供任何方法来传递属性列表和URL.你知道调用应用程序如何用iOS SDK 4.2做到这一点吗?

iphone cocoa-touch uiapplicationdelegate ipad ios

19
推荐指数
1
解决办法
5031
查看次数

导入AppDelegate

通常我会在AppDelegate中初始化我的模型类变量,以便不同的ViewControllers可以使用它们,而无需跨类文件传递它们的实例.但是,每次我将AppDelegate导入.m文件以访问这些变量的数据时,我觉得我做错了.

这是访问这些变量的正确方法还是我应该采取不同的方式?

编辑: 我的问题不是如何访问变量.我目前使用这行代码来获取我的appDelegate实例:

id appDelegate = [[UIApplication sharedApplication] delegate];

从概念上讲,我想知道这是否是与应用程序的模型类交互的可接受方式.对我来说,似乎应用程序的AppDelegate整体管理应用程序.因此,将此类导入到应用程序类链中的其他类中似乎违反直觉.

model-view-controller dependencies cocoa-touch uiapplicationdelegate ios

18
推荐指数
2
解决办法
5914
查看次数

有没有办法将命令行选项从Xcode传递到我的iOS应用程序?

我希望在测试期间启动它时找到一种方法将某些信息传递到我的应用程序,以便我可以执行特殊的调试任务.Xcode有一个部分"在启动时传递的参数",我假设它们将显示在我的UIApplicationDelegate的应用程序中:didFinishLaunchingWithOptions:但是传入的字典总是为零.

我是以错误的方式来做这件事的吗?

xcode uiapplicationdelegate ios

17
推荐指数
2
解决办法
8630
查看次数