2009-06-02 6 views
1

NSDictionary構造を含むplistを作成しました。キーはラベルです(これはtableview cell.textを設定するために使用します)。値は、「動的に」cell.imageを設定するために使用するファイル名です。正確なpngファイル名がプロジェクトに読み込まれます。UIImageを使ってcell.imageを設定しようとしたときに困惑しました:imageNamed:

私は思ったほど簡単にするために、plistをNSDictionaryにロードしてから、それを2つの配列に(allKeysとallValuesを使用して)取り出します。細胞画像を設定しようとして

は、私はこの作品、なぜ理解しない:

cell.image = [UIImage imageNamed:@"bad.png"]; 

、これがない(シミュレータで - 私はアプリのクラッシュを取得し、デバッガでbarfing):

cell.image = [UIImage imageNamed:[rowImageList objectAtIndex:indexPath.row]]; 

この次の行をコードの2番目の部分の直前に置くことができ、うまく動作するので、objectAtIndexからNSStringを取得しているようです。

NSLog(@"Image name: %@", [rowImageList objectAtIndex:indexPath.row]); 

私はtemp NSStringを作成して[rowImageList objectAtIndex:]を割り当ててから、そのNSStringを使ってimageNamed:を供給してみました。

- [NSCFArray長さ]:ここ

デバッガからいくつかの情報である 「*:未認識セレクタによりキャッチされない 例外 'NSInvalidArgumentException'、理由にアプリを終了インスタンスに0x262d910

を送信しました** - [NSCFArray length]:認識できない セレクタがインスタンスに送信されました0x262d910 '

Let me k今あなたはもっと情報/コードが必要な場合。

編集:ここで私はrowImageListを移入方法は次のとおりです。

NSArray *myRowImages = [[NSArray alloc] init]; 
myRowImages = [searchFilterList allValues]; 
self.rowImageList = [myRowImages copy]; 
[myRowImages release]; 
//where searchFilterList is an NSDictionary that I loaded from a plist 

は、ここに私のplistのスクリーンショットです: は[IMG] http://i42.tinypic.com/14uwffa.jpg http://i42.tinypic.com/14uwffa.jpg [/ IMG]

編集:改訂rowImageList人口:

NSMutableArray *myRowImages = [[NSMutableArray alloc] init]; 
NSEnumerator *enumerator = [searchFilterList objectEnumerator]; 
id object; 

while ((object = [enumerator nextObject])) { 
    [myRowImages addObject:[object objectAtIndex:0]]; 
} 
self.rowImageList = myRowImages; //edit: added self. prefix 
[myRowImages release]; 
+0

ええと...私は物事を再チェックする必要があります。 rowImageListは配列ですが、NSStringを配列(NSStringオブジェクトの配列)に 'プッシュ'していると仮定しました。 rowImageListに値を設定する方法は次のとおりです。 \t NSArray * myRowImages = [[NSArray alloc] init]; \t myRowImages = [searchFilterList allValues]; \t self.rowImageList = [myRowImages copy]; \t [myRowImages release]; - searchFilterListはplistからロードしたNSDictionaryです。 – kindaran

+0

善良な主人は、その形式をうまくできませんでした。 – kindaran

+0

あなたがフォローしている場合、私はついに を変更しました。 "rowImageList = myRowImages;" 〜 "self.rowImageList = myRowImages;" 後でコード内でrowImageListを使用しようとすると、変わったことが起こっていました。 – kindaran

答えて

1

NSLog()からの出力を再確認し、それがNSStringを含む配列でないことを確認します。それはエラーがあなたに言っていることです。 NSStringが必要なNSArrayを渡しています。

+0

はい、あなたは正しいです。私は文字列の代わりに配列を取得していました。私は配列の読み込みの新しい(しかし、おそらくまだかなり正しい)バージョンを投稿します。 – kindaran

1

このエラーは、[rowImageList objectAtIndex:indexPath.row]が配列として返され、期待どおりの文字列ではないことを意味します。

値が出力される理由は、配列を出力するために、NSLogステートメントに%@を指定する必要があるためです。

メソッドをデバッグし、[rowImageList objectAtIndex:indexPath.row]のクラスを確認してください。おそらく配列になると思われます。

0

plistがキー/文字列のペアであると確信していますが、何らかの形で名前を配列にラップしていませんか?

+0

私はこの時点では何も確信していません。 plist構造体はDictionary(root)> Array(child)> String(配列の子)であり、4組のArray/Stringを持ちます。私はplistの別の例をコピーしようとしていました。私の前提は、ArrayがキーでStringが値であるNSDictionary構造を作成していたということでした。その説明がどれほど明確かわかりません。 – kindaran

+0

あなたはplistを誤解しています。あなたのplistのキーは、文字列 "All Items"、 "Good Items"などです。値は配列です。ストリングは配列に属します。 NSLog(@ "%@"、searchFilterList)を追加して、データ構造を理解できるかどうかを確認してください。どのようにこのplistをロードしていますか? –

+0

配列が構造化されている方法から、次のようにします。 cell.image = [UIImage imageNamed:[[rowImageList objectAtIndex:indexPath.row] objectAtIndex:0]]; ディクショナリでallValuesを使用すると、4つの配列を含む配列が返されます。これらの配列のそれぞれは文字列を保持します。 NSlogは配列の内容を印刷してOKに見えるでしょうが、あなたのイメージはnilになります。 –

関連する問題