什么是UIApplicationDidEnterBackgroundNotificationiPhone应用程序的使用或我们如何从中获益
有人可以解释如何控制iOS应用程序中的执行流程吗?我知道UIApplicationMain首先从main调用.那又怎样?我定义的方法和主要方法之间有什么关系?这一切都是事件驱动的还是有一些结构化的序列?
我不是故意这么模糊,我只需要知道从哪里开始.也许我是以错误的方式看待这个.
例如,在C++中我会做类似的事情:
#include "myMethods.h"
int main (int argc, char * const argv[]) {
Method1(); // Initialization
Method2(); // Opening views and options
Method3(); // Meat of the program
return 0;
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.
我一直在尝试处理在我的应用程序中接收通知,但它并没有真正解决.
我用的时候didReceiveLocalNotification:(UILocalNotification *)notification.我可以接收并使用用于进入应用程序的通知,没有任何问题
但是,只有在应用程序已经运行时才激活此功能(活动,非活动,后台,并且可能已暂停,但我还没有尝试过).
现在,didFinishLaunchingWithOptions:(NSDictionary *)launchOptions您可以使用此函数[launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]返回UILocalNotification.
但是,从非运行状态启动应用程序时,不会触发此事件.然后LocalNotification打开应用程序,但我无法以任何方式使用它.
现在,我的问题是:如何让它工作,所以当应用程序处于未运行状态时,我可以在启动应用程序时从通知中接收和处理通知?或许我在这里做错了吗?
以下是我的应用程序中的一些示例代码:
首先,didFinishLaunchingWithOptions功能,不幸的是,它不起作用.该功能[sharedLocalNotificationsInstance processNotification:notification]永远不会启动......
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
LocalNotificationsController *sharedLocalNotificationsInstance = [LocalNotificationsController sharedLocalNotificationsInstance];
[sharedLocalNotificationsInstance checkNotifications];
UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
if ( notification != nil ) {
// Process the received notification
[sharedLocalNotificationsInstance processNotification:notification];
application.applicationIconBadgeNumber = 0;
}
return YES;
}
Run Code Online (Sandbox Code Playgroud)
第二段代码:didReceiveLocalNotification函数,完美运行:我收到通知,[sharedLocalNotificationsInstance processNotification:notification]完美运行.
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
// Used when the application launches from …Run Code Online (Sandbox Code Playgroud) 我已经想出了如何阻止iOS设备进入睡眠状态(见下文),但是我在修复设置方面遇到了麻烦.根据Apple文档,它应该只是改变idleTimerDisabled财产的价值.但是当我测试它时,它不起作用.
这就是我最初阻止设备进入睡眠的方式:
//need to switch off and on for it to work initially
[UIApplication sharedApplication].idleTimerDisabled = NO;
[UIApplication sharedApplication].idleTimerDisabled = YES;
Run Code Online (Sandbox Code Playgroud)
我原以为会有以下几种方法:
[UIApplication sharedApplication].idleTimerDisabled = NO;
Run Code Online (Sandbox Code Playgroud)
来自Apple文档:
此属性的默认值为NO.当大多数应用程序在短时间内没有作为用户输入的触摸时,系统将设备置于屏幕变暗的"睡眠"状态.这样做是为了节省电力.但是,没有用户输入的应用程序除了加速计 - 游戏,例如-can,通过将此属性设置为YES,禁用"空闲计时器"以避免系统睡眠.
重要提示:您应该仅在必要时设置此属性,并且当需要不再存在时,应确保将其重置为NO.大多数应用程序应在闲置计时器结束时让系统关闭屏幕.这包括音频应用程序.通过适当使用音频会话服务,当屏幕关闭时,播放和录制不会中断.应该禁用空闲计时器的唯一应用程序是通过零星的用户交互来映射应用程序,游戏或类似程序.
有人遇到过这个问题吗?我在iOS6和iOS5上测试.提前致谢.
我有一种情况,我使用POST方法在模拟器中的safari浏览器中托管一个URL.在模拟器中启动我的iOS应用程序后,在safari中打开该网页.为了启动safari,我使用了[[UIApplication sharedApplication] openURL:...
post方法如下:
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://***some client url***.jsp"]];
NSString *post = [NSString stringWithFormat:@"username=%@&password=%@", userName, password];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
[request setHTTPMethod:@"POST"];
[request setValue:[NSString stringWithFormat:@"%d", [postData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:postData];`
NSURLConnection* _urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[_urlConnection start];
Run Code Online (Sandbox Code Playgroud)
NSURLConnection*_urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; [_urlConnection start];
使用UIWebView时,这段代码可以正常工作.但我想使用这个"请求"启动Safari,该请求附加了POST方法的用户名和密码数据.
要启动Safari,我必须调用以下代码:
[[UIApplication sharedApplication] openURL:request];
Run Code Online (Sandbox Code Playgroud)
But this throws a warning obviously because "request" is of type NSMutableURLRequest. "Semantic Issue: Incompatible pointer types sending 'NSMutableURLRequest*' to parameter of type …
我正在开发一个ios应用程序,我必须使用UI的自定义字体.我知道如何在应用程序中集成新的自定义字体.为此我有
此自定义字体显示效果.但我想要做的是,我想将它们设置为systemFont.所以我不必在所有UI元素中设置它们.
我想要类似的东西
[[UIApplication sharedApplication] systemFont:@"Arial"];
Run Code Online (Sandbox Code Playgroud)
这可能吗?谁能帮我这个?
是否可以从iPhone应用程序启动"照片"应用程序?与发送邮件类似?
[[UIApplication sharedApplication] openURL:url];
Run Code Online (Sandbox Code Playgroud) 我对这两个州有点困惑.以下是我的理解;
当应用程序处于后台并且如果您
"Application does not run in background"在App plist文件中设置为NO,则App继续在后台运行.在挂起模式下,App保留在内存中但不执行代码!系统在移动到Suspended状态时不会通知App,并在内存不足的情况下从内存中清除App以为前台Apps创建空间.
我的理解是否正确?如果是这样,那么当App在后台运行并执行代码时,为什么不在控制台上打印我的NSLog?我的TCP套接字连接实际发生了什么,我不断从服务器获取数据?为什么我们需要Suspended状态无论如何系统最终会在低内存情况下从内存中清除App.App从暂停状态变为活跃状态还是重新开始是否有任何区别?
我不是在发明轮子.在iOS8中,要从应用程序内部打开"设置",我正在使用此代码:
BOOL canOpenSettings = (&UIApplicationOpenSettingsURLString != NULL);
if (canOpenSettings)
{
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];
}
Run Code Online (Sandbox Code Playgroud)
代码在stackoverflow中有很多答案和问题.
问题出现在Xcode 6.3上,我有一个警告说:
Comparison of address of 'UIApplicationOpenSettingsURLString' not equal to a null pointer is always true
有趣的是Apple在他们的示例代码中使用它:https:
//developer.apple.com/library/ios/samplecode/AppPrefs/Listings/RootViewController_m.html
关于如何避免警告并仍然检查我是否可以打开设置的一些想法?
我的应用程序在不同的屏幕中使用:
[[UIApplication sharedApplication] openURL:url];
Run Code Online (Sandbox Code Playgroud)
为了打开从我的网络服务收到的 URL。有时,这些 URL 与我的项目无关,因此将它们打开到 Safari 是可以的。其他的,这些 URL 属于我自己的,比如产品详细信息。这些可以由我的应用程序使用通用链接打开并转到正确的屏幕,但这并没有发生。
阅读苹果文档我看到了这个:
重要的是要了解,如果您的应用程序使用 openURL: 打开指向您网站的通用链接,则该链接不会在您的应用程序中打开。在这种情况下,iOS 会识别出呼叫源自您的应用,因此不应将其作为通用链接由您的应用处理。
这种行为让我很困惑。如何使用 openURL 尝试首先在我的应用程序中处理该 URL,而不是直接转到 Safari?
我找到了一个快速/肮脏的解决方法。删除 openURL 并在我的应用每次使用 openURL 时使用它:
NSUserActivity* userActivity = [[NSUserActivity alloc] initWithActivityType:NSUserActivityTypeBrowsingWeb];
userActivity.webpageURL = url;
[[UIApplication sharedApplication].delegate application:[UIApplication sharedApplication] continueUserActivity:userActivity restorationHandler:nil];
Run Code Online (Sandbox Code Playgroud)
请注意,我的 appdelegate application:continueUserActivity:restorationHandler: 会将我的应用程序中没有特定屏幕的任何 URL 转发到 openURL,因此,它工作得非常好,但我觉得这是一个糟糕的解决方案。
uiapplication ×10
ios ×7
objective-c ×6
iphone ×3
background ×1
cocoa-touch ×1
control-flow ×1
execution ×1
fonts ×1
ios5 ×1
sequence ×1
xcode ×1
xcode6.3 ×1