我想知道App Delegate的功能.它有一些很好的方法,比如-applicationDidFinishLaunching应用程序完成启动时会调用,等等.但究竟是什么呢?是否在UIApplicationMain函数中实例化了一些对象?
我的应用程序中的每个类都可以访问该App Delegate对象,它是如何工作的?网上是否有任何可视化这些关系的好图表?
delegates uiapplication uiapplicationdelegate ios appdelegate
我有一个关于IOS应用程序的新手问题...如果我创建一个名为TestForStackOverflow的新的基于视图的应用程序,Xcode会自动为TestForStackOverflowAppDelegate.h创建这样的代码:
@class TestForStackOverflowViewController;
@interface TestForStackOverflowAppDelegate : NSObject <UIApplicationDelegate>
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet TestForStackOverflowViewController *viewController;
@end
Run Code Online (Sandbox Code Playgroud)
以及TestForStackOverflowAppDelegate.m中的以下内容:
#import "TestForStackOverflowAppDelegate.h"
#import "TestForStackOverflowViewController.h"
@implementation TestForStackOverflowAppDelegate
@synthesize window = _window;
@synthesize viewController = _viewController;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
[...]
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
1)TestForStackOverflowAppDelegate类在哪里设置为当前应用程序的委托?它是"自动"完成的吗?我已经看到main.m源文件只包含以下代码:
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil); …Run Code Online (Sandbox Code Playgroud) 我有一个简单的Android应用程序与一个活动.此活动下载一个小型XML文件并将内容显示给用户.目前,我在Activity的onStart方法中开始下载.
我的理解是,当设备方向改变时,活动会被销毁并重新创建.因此,当用户轮换我的应用程序时,将再次下载XML文件.我希望该应用程序只下载一次文件,因为它每天更改不会超过几次.因此,我希望保留下载的数据,以便在设备方向发生变化时重新使用本地数据.Android中保留数据的理想对象是什么?
在iOS上我会使用它AppDelegate来下载一次数据并保留它.然后,显示数据的viewController只需重新使用本地数据,如果它被销毁并重新创建.
我正在使用Xcode 11并为iOS 13构建应用程序。在Xcode中创建的新项目中,缺少一些UIApplicationDelegate方法,因此我将它们重新添加到了应用程序委托文件中。“单视图应用程序”项目的新模板缺少这些方法。问题在于,除了之外,没有其他任何委托方法被调用-application:didFinishLaunchingWithOptions:。这是我的应用程序委托:
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"application:didFinishLaunchingWithOptions:");
return YES;
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
NSLog(@"applicationDidEnterBackground:");
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
NSLog(@"applicationWillEnterForeground:");
}
#pragma mark - UISceneSession lifecycle
- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options {
return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role];
}
- (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet<UISceneSession *> *)sceneSessions {
}
@end
Run Code Online (Sandbox Code Playgroud) 我正在玩一个简单的OCUnit测试用于iPhone应用程序,并且只是想断言应用程序委托是我期望它的类的实例.我没想到这个测试非常有用,但结果却揭示了我对Objective C的误解.
我首先得到了代表的参考.然后我记录回来的类名.在我的例子中,输出正确地说"app delegate的类名是CalculatorAppDelegate".
但是,下一行的断言失败了,我不明白为什么.
- (void)testAppDelegate
{
id appDelegate = [[UIApplication sharedApplication] delegate];
NSLog(@"app delegate's class name is %@", NSStringFromClass([appDelegate class]));
NSLog(@"is it kind? %i", [appDelegate isKindOfClass:[CalculatorAppDelegate class]]);
NSLog(@"is it member? %i", [appDelegate isMemberOfClass:[CalculatorAppDelegate class]]);
NSLog(@"class == class %i", [appDelegate class] == [CalculatorAppDelegate class]);
STAssertTrue([appDelegate isKindOfClass:[CalculatorAppDelegate class]], @"wtf");
}
Run Code Online (Sandbox Code Playgroud)
什么情况可能导致NSStringFromClass()返回正确的类名,而isKindOfClass返回false?
2011-03-19 15:51:13.864 Calculator[40092:207] app delegate's class name is CalculatorAppDelegate
2011-03-19 15:51:13.864 Calculator[40092:207] is it kind? 0
2011-03-19 15:51:13.865 Calculator[40092:207] is it member? 0
2011-03-19 15:51:13.865 Calculator[40092:207] class == class …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序与少量UITextView各种大小的s.看起来如果一个UITextView足够小的font.pointSize足够高,那么在文本足够大以填充文本视图之后就无法添加空格.
例如:
我想弄清楚这里发生了什么,我开始输入我常用的调试字符串,我输入"What"命中空格键并且没有空格出现(但这是常见的).我键入了"the",看起来就像是在前一个单词的末尾添加了.果然,没有空间.我可以回去添加空间就好了,一旦我添加空间,我可以添加其他空格作为自动换行然后变得有效.
另一个神秘的行为是,当您双击空间时,它不会添加句点到最后.它用句点替换最后一个字符.所以,"什么"+空间+空间变成"什么".
现在,我正在用字体大小做一些有趣的事情,比如我自动调整字体大小,以便文本填充合理范围内提供的空间,但是当我禁用它时,我仍然可以重现这种行为.唯一的区别是,不是在一行上拟合,而是包裹到下一行.
例如,如果我输入"What"+ space +"the",它会出现"Whatthe",第一行带有"What",第二行带有"the"(虽然我只能看到"the"的顶部).此外,这里有一些日志信息textViewDidChange:.
Character textView.text.length
--------- --------------------
W 1
h 2
a 3
t 4
<space> 4
t 5
h 6
<space> 7 <---- Here's a wierd one . . . now spaces all
? 8 work fine unless it's resizing
Run Code Online (Sandbox Code Playgroud) 我不知道何时或为何要使用 [[UIApplication sharedApplication] delegate]
当我[self.navigationController pushViewController:myView Animation:YES]不导航时我使用委托.我做MyView *delegate = [[UIApplication sharedApplication] delegate]并[delegate pushViewController:myView Animation:YES]正确地使导航工作.
我不知道解决方案是否正确,另外我不知道[[UIApplication sharedApplication] delegate]它对应用程序的用途或影响是什么.
有人能帮我吗?
谢谢!!
我有一个接收推送通知的应用程序.在didReceiveRemoteNotifications中,我想让应用程序在应用程序的导航控制器中显示一个特定的视图控制器(恰好是根视图控制器).实现这一目标的最佳方法是什么?我可以在应用程序委托中获得对导航控制器的引用吗?
编辑:这是我正在尝试使用的代码.它似乎使用正确的导航控制器,但它根本不显示视图控制器,只是一个空白屏幕:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
EventDetailViewController *destCon = [storyboard instantiateViewControllerWithIdentifier:@"EventDetailViewController"];
destCon.event=notifyEvent;
UINavigationController *navController =(UINavigationController *) self.window.rootViewController;
[navController pushViewController:destCon animated:YES];
Run Code Online (Sandbox Code Playgroud)
这是我所看到的:

uinavigationcontroller push-notification uiapplicationdelegate pushviewcontroller ios
我正在开发一个应用程序,如果终止它将无法工作.它有一些后台任务.如果应用程序被终止,我想显示本地通知.有些应用程序执行此操作意味着这是可行的.但我无法找到方法.
我试图在applicationWillTerminate:appdelegate的方法中设置本地通知,并在我的viewcontroller中添加了应用终止的通知,但是当app实际终止时,没有任何方法被调用.
- (void)applicationWillTerminate:(UIApplication *)application
{
NSLog(@"terminated");
UIApplication * app = [UIApplication sharedApplication];
NSDate *date = [[NSDate date] dateByAddingTimeInterval:15];
UILocalNotification *alarm = [[UILocalNotification alloc] init] ;
if (alarm) {
alarm.fireDate = [NSDate date];
alarm.timeZone = [NSTimeZone defaultTimeZone];
alarm.repeatInterval = 0;
alarm.alertBody = @"This app does not work if terminated";
alarm.alertAction = @"Open";
[app scheduleLocalNotification:alarm];
}
[app presentLocalNotificationNow:alarm];
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
Run Code Online (Sandbox Code Playgroud)
任何帮助都会很棒.
提前致谢 !!!
我的应用程序在从锁定屏幕变为活动状态时(在激活时锁定)或从其他任何东西变为活动状态时具有不同的行为.
在iOS 6及更低版本上,我可以检测到这一点
UIApplicationState state = [[UIApplication sharedApplication] applicationState];
if (UIApplicationStateInactive == state)
// Coming from locked screen (iOS 6)
else
// Coming from Springboard, another app, etc...
Run Code Online (Sandbox Code Playgroud)
但是在iOS 7上,状态值UIApplicationStateBackground在两种情况下都是如此.这是预期的行为吗?如何正确检测应用程序现在是否从锁屏启动?
注册开发者,我已经在NDA解除之前在devforums上发布了这个,请看这里
cocoa-touch background multitasking uiapplicationdelegate ios
ios ×7
iphone ×4
objective-c ×3
delegates ×2
xcode ×2
android ×1
appdelegate ×1
background ×1
cocoa-touch ×1
cs193p ×1
ios13 ×1
multitasking ×1
ocunit ×1
uitextview ×1