应用程序 didFinishLaunchingWithOptions 没有被调用

Posted

技术标签:

【中文标题】应用程序 didFinishLaunchingWithOptions 没有被调用【英文标题】:application didFinishLaunchingWithOptions not getting called 【发布时间】:2012-11-11 20:19:02 【问题描述】:

我试图弄清楚为什么在我的应用程序启动时似乎没有调用“应用程序 didFinishLaunchingWithOptions”。我的 NSLog (@"Launch!") 语句没有出现在控制台中,并且它之后的字典也没有被创建。如果它有所作为,我将使用带有导航控制器的 Storyboard 作为初始视图。我尝试将“对象”添加到导航控制器并将其设置为“AppDelegate”,然后将其设置为引用插座,但这似乎也没有什么不同。每次应用启动时不应该调用这个方法吗?我什至重置了模拟器,但仍然没有。

谢谢。

//
//  AppDelegate.m
//  PersonLibraryios
//
//  Created by Joey on 11/7/12.
//  Copyright (c) 2012 Joey. All rights reserved.
//

#import "AppDelegate.h"
#import "AddViewController.h"
#import "Person.h"
@implementation AppDelegate
@synthesize PersonDict;

-(void)addtoDict:(Person *)newPerson

    [PersonDict setObject:@"newPerson" forKey:[newPerson name]];




- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

  NSLog (@"Launch!");

    // Override point for customization after application launch.
    return YES;
    PersonDict = [NSMutableDictionary dictionaryWithContentsOfFile:@"diskDict"];

【问题讨论】:

【参考方案1】:

编辑:当我最初写这篇文章时,一定是度过了糟糕的一天。去掉了本帖极其不必要的态度,澄清了一些事情。

如果您不知道,return 会将控制权返回给方法/子例程的调用者。由于您在创建字典之前从该方法返回 YES,因此它永远不会被创建并设置为属性。

此外,您尝试将 NSMutableDictionary 分配给的任何语法都不正确。看来 personDict 是基于@synthesize 的属性,所以:

您正在访问支持它的实例变量。您应该像这样使用点符号访问属性:

self.personDict = [NSMutableDictionary dictionaryWithContentsOfFile:@"diskDict"];

//in addToDict
[self.personDict setObject:@"newPerson" forKey:[newPerson name]];

或使用 setter 和 getter(点表示法具有相同的效果):

[self personDict];
[self setPersonDict];

我不认为你对setObject:forKey: 的使用是你想要的。

//the object associated with the key will always be
//the NSString "newPerson" 
[self.personDict setObject:@"newPerson" forKey:[newPerson name]];
//did you mean to set the object to the method argument newPerson?
[self.personDict setObject: newPerson forKey:[newPerson name]];

另外,在 Objective-C 中,你应该用驼峰式命名属性和变量,第一个字母小写。像myCoolVar,或者在这种情况下,personDict 而不是PersonDict;第一个字母大写骆驼大小写用于类名,例如您的 Person 类。

最后,如果您手动 @synthesize,最好将支持变量命名为 _<variable name> 以避免意外访问它。

@synthesize personDict = _personDict;

【讨论】:

我能说什么,我是新手,正在尽我所能去学习。问题原来是由于“return YES”语句高于一切。谢谢。 对不起,如果你觉得我在对你说话,我不是;我自己是新人。我认为学习Objective-C的最好方法是买一本好书;直接跳入和适应往往会导致对基本概念的误解。我从那方面的经验谈起。 我已经在这方面工作了几个月(我也一直在使用书籍),但有时在试图找出更复杂的概念时,我倾向于掩盖基础知识。感谢您的编辑顺便说一句。我也知道我哪里做错了。 我在这方面也有几个月了。起初我遇到了麻烦,但后来我拿起了一份Programming iOS 5。它指示我阅读 K&R 的C 编程语言 的前半部分。有人说你应该从 Objective-C 开始,但我发现通过学习 C 来学习子例程、数据类型、控制流、指针等的基础知识对我有很大帮助。没过多久,我就可以练习了。然后,我可以专注于学习面向对象编程的特定内容。 PiOS5 往往是冗长的,但到目前为止它对我有用。 :)

以上是关于应用程序 didFinishLaunchingWithOptions 没有被调用的主要内容,如果未能解决你的问题,请参考以下文章

将应用程序提交到应用程序商店是不是需要应用程序 url

mac找不到应用程序

Qt程序,“由于应用程序配置不正确,应用程序未能启动 重新安装应用程序可能会纠正这个问题”,高手请指点

将 iPhone 应用程序转换为通用应用程序时应用程序图标不显示

部署支持10和11个应用程序的应用程序应用程序

asp.net web应用程序和asp.net web窗体应用程序的区别?