2010-11-19 14 views
3

私は、iOS上で一般的な '属性/キーエディタ'ビュークラスを作成しています。たとえば、[objectForKey isKindOfClass:[NSDate class]]を使用して編集キーのタイプを確認します。 objectForKeynilの場合、失敗してしまうことがわかったときに壁に突き当たりました。上記のプロパティがnilであっても、汎用Objective-Cプロパティのクラス/戻り型を取得する方法はありますか?私はObjective-Cランタイムでmethod_getReturnTypeについて知っていますが、それは私が必要とするもののために過剰なもののように思えます。Objective Cでメソッドの戻り値の型を取得する方法はありますか?

答えて

3

できません。メソッドの戻り値の型情報が利用可能ですが、オブジェクトを返すメソッドの戻り値の型のエンコーディングは単に "オブジェクト参照"を意味する@です。

0

まず、objectForKey!= nilであることを確認してから、isKindOfClassチェックを続行することはできませんか?オブジェクトが最初にnilと等しくないことを確認した場合は、簡単に確認するか、失敗することなく安全に終了することができます。

+0

非常に真実で、おそらく私は長期的に何をしなければいけないのか、ここには解決策がないのですが、ユーザーが誰もいない場所にオブジェクトを設置できるようにしたいと考えています。たとえば、この場合、私はデータ報告システムを構築しており、最初は開始日と終了日がnilであるため、簡単に[NSDate date]にするのは簡単ですが、柔軟性が欲しいです。 – refulgentis

+0

!= nilなら何もしないのは分かりません。もしあなたが何らかのスーパーリフレクションをしようとしているのでなければ、その場合にはそれらの言語は間違っています。 –

0

は、私はあなたのデータはどこから来ているかわからないが、あなたはnsnullをしてnilを取って代わる検討する必要があります、それはあなたが技術的にnullである何かにNSObjectのような特性を得ることができるようになります

しかし、ヌルチェックはお尻の痛みになります。

それは何を求めていることは意味がありません!= [nsnullをヌル]

+0

'[NSNull null]'は 'nilそうです。 –

+0

チェックをたくさんする必要があるなら、いつでも便利なダンディーカテゴリを使うことができます:https://gist.github.com/707337 – mipadi

+0

@peterしかし、少なくとも彼はisKindOfClassをやることができます... ...私はここで微風を撃っています。彼が何を言っているのか誰にもわからない。 –

2

!= nilの

(nsnullを*)対象のオブジェクトからなります。

名前だけではメソッドが識別されないことに注意してください。オブジェクトはそれらのメッセージに応答します(または応答しません)。メソッドはオブジェクト(またはクラス)の一部としてのみ存在します。

オブジェクトを持たない場合は、オブジェクトにメッセージを送信すると仮定して返すことはできません。

ETA:プロパティの属性を編集するにはオブジェクトを編集する必要はありますか?あなたはどこかにバグがあるようです。

私はObjective-Cランタイムで約method_getReturnTypeを知っていますが、これは私が必要とするものが過剰なもののようです。

2つの方法があります。非公式のプロパティ(@property宣言のないKVC準拠のアクセサメソッド)をサポートしたい場合は、それがまさに必要なものです。正式なプロパティ(@property)のみを気にする場合は、the property_getAttributes functionを使用してください。

+0

彼は検査対象のオブジェクトが無名だと言っていませんが、プロパティ値はnilです。 –

+0

Ahruman:もう一度質問を読んで、私はあなたが正しいと思います。 –

+0

アールマンが正しい – refulgentis

関連する問題