0

ここでは、テーブルベースのiPhoneアプリケーションの作成方法を学ぶためにスクリーンキャストを見てきましたが、これまでのところ順調に進んでいます。現在、私は第3話の途中で、問題が発生し始めています。

テーブルの最上位レイヤーの一時的なハードコーディングを削除するために、チュートリアルでは、NSMutableDicitonaryすべてのエントリとそのデータのを作成し、次に、NSArrayusingforKeysステートメントを作成して、テーブルのセルに表示するヘッドワードのみを含む配列を取得します。

私が抱えている問題は、配列の変数が合成を拒否することです。

問題のある変数は、AppDelegate.hファイル内で残りのプロパティとともに次のように定義されています。

@property (readonly) NSArray *recipes;

次に、次のように合成され、AppDelegate.mファイルに実装されます。

@synthesize recipes;

- (NSArray *)recipes {
    return [data allKeys];
}

スクリーンキャストの作者に尋ねたところ、彼は次のことを提案しましたAppDelegate.h

@class Foo :NSObject {
    NSArray *_recipes;
}

@property(nonatomic, retain)NSArray *recipes;

@end

そしてこれはAppDelegate.m

@implementation Foo

@synthesize recipes = _recipes;

@end

この方法を試しましたが、以前よりも多くのエラーが発生しました。この変数定義が他の@propertyと異なる点は何ですか?また、どのように動作させることができますか?

4

2 に答える 2

11

@property「単なる」メソッド宣言の省略形です。 @dynamicこれは、実行時に実装を動的に提供することを意味します。これは、非定型の高度な使用パターンです。

したがって:

@property (readonly) NSArray *recipes;

ヘッダーでは、次の略記です。

- (NSArray *) recipes;

@synthesize recipes;@property宣言によって暗示されるメソッドを合成します。これ以上でもそれ以下でもありません。誰かがそれについて言及したので@synthesize recipes=_recipes;、メソッドを合成しますが_recipes、ストレージにはインスタンス変数を使用します(ではありませんrecipes)。

独自のゲッターを実装する場合(これは読み取り専用であるため、ゲッターのみがあります)、次の形式になります。

- (NSArray *) recipes {
    return ....;
}

@synthesizeその場合、またはのどちらも必要ありません@dynamic

于 2009-12-02T04:26:31.043 に答える
2

@synthesizeプロパティにアクセスするための簡単なメソッドを生成します。アクセサメソッドはより複雑であるため、で生成することはできません@synthesize

- (NSArray *)recipes {
    return [data allKeys];
}
于 2009-12-01T22:58:29.660 に答える