0

アプリの起動時に「application 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"];
4

1 に答える 1

1

編集:これを最初に書いたとき、悪い日を過ごしていたに違いありません。この投稿から非常に不必要な態度を削除し、いくつかのことを明確にしました。

ご存じない場合returnは、メソッド/サブルーチンの呼び出し元に制御を返します。ディクショナリを作成する前にメソッドから YES を返すため、ディクショナリが作成されてプロパティに設定されることはありません。

さらに、それを割り当てようとしているものの構文NSMutableDictionaryが正しくありません。personDict は so に基づくプロパティの@synthesizeようです:

それを裏付けるインスタンス変数にアクセスしています。次のようなドット表記を使用してプロパティにアクセスすることになっています。

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

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

またはセッターとゲッターを使用する (ドット表記は同じ効果があります):

[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;
于 2012-11-11T20:30:32.473 に答える