2013-10-26 34 views
0

我有一个按钮,它在按下时会创建一个对象thing。然后,它睡了十秒钟,然后调用thing.go它得到像显示应用程序状态iOS

UIApplicationState state = [[UIApplication sharedApplication] applicationState]; 

应用状态。然后下面this问题的回答和评论我检查,如果应用程序是在后台运行,如果是,它会显示一个本地通知。

所以我按下按钮后立即按Home键回到主屏幕(这种情况使应用程序在后台)

不过,我可以告诉大家的是,if语句返回false,因此不执行内部的任何代码(通过将NSLog放入if语句中)。

所以我的下一个思考过程是以某种方式使用NSLog(state)在控制台中显示日期。显然我不能这样做。

那么如何显示applicationState来解决我的问题?还是有另一种方法可以检查该应用程序是否在该类的方法中的后台运行?

这里是go功能这就是所谓的IBAction内当按钮被按下

-(void)go { 
    if (state == UIApplicationStateBackground) { 
     NSLog(@"App is in background"); 
    } 
} 

这里是链接到该按钮的IBAction,即,在按下按钮时运行

- (IBAction)button_help { 
    myclass* thingy = [[myclass alloc] init]; 
    sleep(10); 
    thingy.go; 
} 
+0

仅为您添加的代码Zaph :) –

+4

仅供参考 - 使用属性表示法调用方法的做法很糟糕,即使它有效。调用'go'方法:'[thingy go];'。 – rmaddy

+0

你不能只使用'applicationDidEnterBackground'方法去做你想做的事情吗? https://developer.apple.com/library/ios/documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference。html#// apple_ref/occ/intfm/UIApplicationDelegate/applicationDidEnterBackground: – Popeye

回答

1

你应该几乎不使用睡眠。忘记它存在。它锁定了你的应用程序,没有任何变化,包括转换到后台。

你想要做的是设置一个定时器10秒,然后调用thing.go。

但是,这通常会因定时器不在后台运行而变得复杂。事实上,除非采取特殊措施,否则您的应用在后台不会获得任何处理器时间。你会被告知你正在进入背景,然后你接到的下一个电话就是重新回到前台。

当您的应用程序收到一条消息说它正在发送到后台时,它将需要进行系统调用以请求后台处理时间。 (我不记得那个叫我头顶的电话,现在没有Xcode在运行)

苹果改变了iOS 7中后台处理的规则,但你说这是iOS 6,所以这些更改不适用。

+0

虽然我希望你可以更具体一些,但似乎有问题。 –

0

如果我理解正确,您正在检查应用程序是从本地通知返回还是已经处于活动状态?

if (state == UIApplicationStateActive) { 
    // do something 
    NSLog(@"application was active "); 
} else { 
    NSLog(@"sent from notification"); 
} 
+0

那是正确的,我检查了如果应用程序是在BG。 –

+0

https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html 查找应用程序didReceiveLocalNotification:和应用程序didFinishLaunchingWithOptions。 – Edward

+0

我确实看过。但这不是我所要求的。 –