私のアプリのモデルのいずれかで以下のように一時プロパティを実装しました。モデル設計では、未定義型の一時プロパティとして宣言されています。一時的なプロパティのprimitiveValueアクセサのコンパイラ警告を取り除くことはできませんgetter impls
@property (nonatomic, readonly) NSNumberFormatter *currencyFmt;
このアクセサの電流(警告フリー)IMPLは次のとおりです。
- (NSNumberFormatter *) currencyFmt
{
[self willAccessValueForKey:@"currencyFmt"];
NSNumberFormatter *fmt = [self primitiveValueForKey:@"currencyFmt"];
[self didAccessValueForKey:@"currencyFmt"];
if (fmt == nil)
{
fmt = [[[NSNumberFormatter alloc] init] autorelease];
[fmt setNumberStyle:NSNumberFormatterCurrencyStyle];
[fmt setLocale:[self localeObject]];
[self setPrimitiveValue:fmt forKey:@"currencyFmt"];
}
return fmt;
}
documentationが、具体的プリミティブのルックアップのこのバージョンを使用しないことを警告しているので、primitiveValueForKey:
への呼び出しは、ここで問題です。
あなたは強く、このメソッドのディレクトリを使用するのではなく、 を 動的に生成されるアクセサを使用することをお勧めします( の例では、primitiveName:が の代わりにprimitiveValueForKey:@ "name"の代わりに使用されます)。 動的アクセサーは効率的に であり、コンパイル時には のチェックが可能です。
問題は、私はprimitiveCurrencyFmt
の代わりprimitiveValueForKey:@"currencyFmt"
を使用しようとすると、私はオブジェクトがそのセレクタに応答しないことを言って、コンパイラの警告が出ていることです。私はこの警告を無視すれば、実行時にすべてうまく動作しますが、警告はひどいので、そこにあるコードをコミットしたくありません。
ファイルの先頭に@dynamic
と@synthesize
というプロパティを宣言してみましたが、何も助けにならないようです。これらの警告を生成せずに推奨されるダイナミックアクセサを使用するには、何が必要ですか?
ご迷惑をおかけして申し訳ございません。
優秀、ちょうど私が必要なもの!ありがとう。 – glenc