应用程序didFinishLaunchingWithOptions未被调用

时间:2012-11-11 20:19:02

标签: objective-c cocoa-touch appdelegate

我正在试图解释为什么在我的应用启动时似乎没有“应用didFinishLaunchingWithOptions”。我的NSLog(@“Launch!”)语句没有显示在控制台中,也没有创建它之后的字典。如果它有所作为我使用导航控制器作为初始视图的故事板。我尝试将一个“对象”添加到导航控制器并将其设置为“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 个答案:

答案 0 :(得分: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;