2013-02-26 5 views
10

を作成するときに、私は、カスタムナビゲーションバーのクラスを作成し、カスタマイズしています、それはタイトルだが、次のコードを使用して属性:ときに私、しかしのiOS:「オブジェクトからのnilオブジェクトを挿入しようとする[1]」辞書

self.titleTextAttributes = @{ UITextAttributeFont: bariol, 
           UITextAttributeTextColor: [UIColor whiteColor] 
          }; 

をコードを実行すると、次のエラーメッセージを返します。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[1]' 

私はXcodeの4.6を使用してとiOS 6

答えて

6

あなたのリテラル(値とキーのパラメータを使用して、デバイス上で実行していますよ辞書)はnilであってはなりません。

あまり厳しくないコンストラクタを使用する場合は、代わりに+[NSDictionary dictionaryWithObjectsAndKeys:]を使用することを検討してください。

+11

これはそれほど厳密ではないが、キーが期待された場所に 'nil'が見つかった場合、引数が停止したと考えているだけです。特に、 'nil'オブジェクトを渡すと、まったく同じ例外が発生します。 –

+0

@KevinBallardナンセンス。 '' NSDictionary dictionaryWithObjectsAndKeys:@ "a"、@ "a"、nil、@ "b"、nil];から返されるものは?最初のnilオブジェクト引数で読み込みを停止します。 – justin

+0

申し訳ありません私はキーを言ったときに私はオブジェクトを意味しました(ダンフリップメソッド)。これは 'nil'オブジェクトとセンチネル' nil'を区別できません。あるキーに 'nil'を使って、' NSDictionary dictionaryWithObjectsAndKeys:@ "anObj"、@ "aKey"、@ "anotherObj"、nil、nil] 'を見てください。 –

9

bariolのオブジェクトはnilのようです。あなたは辞書にnilを保存することはできません。

編集:実際に

、あなたはそれがコードの右の行だと確信していますか?あなたのエラーはNSPlaceholderArrayを参照しています。リテラルの問題で、@{}リテラルではありません。

+0

@justin: 'dictionaryWithObjects:forKeys:count:'はNSArray'sを使用しません。 C配列を使用します。 –

+0

whoops - nonsenseが返されました:) NSArraysがディクショナリを構築するプロセス(または別のコンストラクタを呼び出すプロセス)で作成されている可能性があります。 – justin

+0

@justin: 'NSDictionary'リテラルは、中間のNSArrayを構築しません。したがって、 '-setTitleTextAttributes:'が何かfunkyをやっていない限り、そうではありません。 –

3

このエラーは他の場所のようです。オブジェクト '1'の配列エラーを指しています。あなたの場合、辞書とオブジェクト '1'はUITextAttributeTextColor: [UIColor whiteColor]で、決してゼロにはなりません。

+7

はい、例外メッセージで[]を確認しようとしている人は、失敗した(nil)オブジェクトの0インデックス付き配列オフセットです。テスト対象:NSString * str = nil; NSDictionary * foo = @ {NSFontAttributeName:str、NSForegroundColorAttributeName:@ "booboo"}; – robm

+1

@robm BOOM!良いですね。 – Benjohn

関連する問題