应用程序 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 没有被调用的主要内容,如果未能解决你的问题,请参考以下文章
Qt程序,“由于应用程序配置不正确,应用程序未能启动 重新安装应用程序可能会纠正这个问题”,高手请指点