2012-11-11 74 views
0

我想知道为什么它看起来没有“应用程序didFinishLaunchingWithOptions”被称为当我的应用程序启动时。我的NSLog(@“Launch!”)语句没有在控制台中显示出来,而且它之后的字典也没有被创建。如果它有所作为,我将使用导航控制器的Storyboard作为初始视图。我尝试在导航控制器中添加一个“对象”,并将其设置为“AppDelegate”,然后将其设置为参考插座,但这似乎也没有任何区别。每次应用程序启动时都不应该调用这种方法吗?我甚至重置模拟器,但仍然没有。应用程序didFinishLaunchingWithOptions没有被调用

谢谢。

// 
// 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]]; 

或使用getter和setter方法(点符号具有相同效果):

[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; 
+0

我能说什么,我是新的,并尽我所能去学习。事实证明,这是由于“返回YES”声明高于一切。谢谢。 –

+0

对不起,如果你觉得我在嘲笑你,我不会;我是新来的。我认为学习Objective-C的最佳方式是获得一本好书;正确的跳跃和适应往往会导致对基本概念的误解。我从这方面的经验谈起。 – Metabble

+0

我已经在这里待了几个月(我也一直在使用书籍),但有时在试图弄清更复杂的概念时,我倾向于忽视基本知识。感谢编辑BTW。我明白我的错在哪里。 –

相关问题