• 締切済み

iPhone(Xcode)でPlistから読込んで画像を表示させる方法(コード)

iPhoneのアプリを作る際に、Plistから読み込んで表示させるコードを教えてください。 例えば、 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <array> <dict> <key>RED</key> <string>001.png</string> <key>BLUE</key> <string>002.png</string> <key>YELLO</key> <string>003.png</string> <key>PINK</key> <string>004.png</string> <key>GREEN</key> <string>005.png</string> </dict> </array> </plist> というプロパティリスト(例えば、ImageName.plist)があるとして、(実際は、<key>の件数が、500件ぐらい) トップページにTableViewのセルとして、RED,BLUE,YELLO,PINK,GREENというセルがあり、 セルを選択した際に、Plistからそのセルに対応したファイル名を読み込んで、 新しいViewにて、画像を表示させたいのですが、(REDを選択すると、新しいViewにて001.pngが表示される) 「Plistからファイル名を読み込んで、新しいViewにて、画像を表示させる」部分のコードの記述の仕方が分からず、 何度やっても、うまく動きません。 どう記述すればいいのでしょうか? ご指導のほど、よろしくお願いいたします。

みんなの回答

noname#97363
noname#97363
回答No.1

・プロパティリストをNSDictionaryにして、それを核にTableViewのdataSourceとする。 ・TableViewからアクションがあれば、NSDictionaryから対象のファイル名をたたき出す。 ・ファイル名からUIImageを作る。 ・適当なビューで表示する。 ...、iPhone開発から遠ざかっているので具体的なことは言えないですが。

masaleon
質問者

お礼

wireheadさん、回答ありがとうございます! 早速やってみますね。

関連するQ&A

  • ソフトウェアアップデートに関して

    現在Mac OS X10.5.8で、ソフトウェアのアップデートを要求されるのですが、 何度やってもインストールに失敗と出てしまいます。 ちなみにmacbook 2.4GHz intel Core2Duo メモリ:2G 667MHzDDR SDRAMです。 Updatesのところにはこう書いてあります。 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>InstallAtLogout</key> <array> <string>zzz061-9813</string> <string>061-9211</string> <string>061-8384</string> <string>061-9556</string> <string>061-9480</string> <string>zzzz041-0061</string> <string>061-9571</string> </array> <key>ProductPaths</key> <dict/> </dict> </plist> どうすればアップデート出来ますでしょうか。 お力添え宜しくお願いします。

    • 締切済み
    • Mac
  • Mac ソフトウェアアップデートに関して

    在Mac OS X10.5.8で、ソフトウェアのアップデートを要求されるのですが、 何度やってもインストールに失敗と出てしまいます。 ちなみにmacbook 2.4GHz intel Core2Duo メモリ:2G 667MHzDDR SDRAMです。 Updatesのところにはこう書いてあります。 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>InstallAtLogout</key> <array> <string>zzz061-9813</string> <string>061-9211</string> <string>061-8384</string> <string>061-9556</string> <string>061-9480</string> <string>zzzz041-0061</string> <string>061-9571</string> </array> <key>ProductPaths</key> <dict/> </dict> </plist> ディスクの修復をしてもダメでした。 どうすればアップデート出来ますでしょうか。 お力添え宜しくお願いします。

    • 締切済み
    • Mac
  • どこが間違っているのでしょうか

    body 内に <xml id="UTIs" src="UTIs.xml"> をおき、onLoad で UTTypeGetIconsFile("public.plain-text") を呼び出すのですが、うまくいきません。実際には "public.plain-text.icons" を得たいのですが、どこが間違っているのでしょうか。 [JavaScript] function UTTypeGetIconsFile(UTTypeIdentifier) { roots = UTIs.XMLDocument; keys = root.getElementsByTagName("key"); for (i=0; i<keys.length; i++) { if (keys[i].innerText == "UTTypeIdentifier") { if (keys[i].nextSibling.innerText == UTTypeIdentifier) { dict = keys[i].parentNode; } } } keys = dict.getElementsByTagName("key"); for (i=0; i<keys.length; i++) { if (keys[i].text == "UTTypeiconsFile") { return keys[i].nextSibling.text; } } } [XML] <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <key>UTExportedTypeDeclarations</key> <array> <dict> <key>UTTypeIdentifier</key> <string>public.plain-text</string> <key>UTTypeiconsFile</key> <string>public.plain-text.icons</string> <!-- 実際には更に続きます --> </dict> <!-- この後もdictタグが続きます --> </array> </plist> ブラウザは IE6 です。

    • ベストアンサー
    • XML
  • アコーディオン風のtableviewの遷移について

    現在、アコーディオン風の階層的なtableviewからタップで画面を遷移するコードを作っています。 一番最初にでてくる画面のセルにAとBがでてきて、AをタップするとA⇨Item1,Item2,Item3,Bをタップすると B⇨Item1,Item2,Item3というように各々セルがでてくるようにしています。その際、コードはdidSelectRowAtIndexPathメソッドに書いてあります。 そこで、次にItemのセルをタップすると、そのタップしたItemに相当する番号(プロパティリストを読み込む)に合わせて画面が遷移するようにしたいのですが、その方法がわかりません。 (didSelectRowAtIndexPathのところに書くと、セルのAやBをタップした時点で画面が遷移してしまい、Itemのセルがでてこないです。) 色々試してはいるのですが、どのように書いたらいいか、わからなくています。 もし、宜しければ、お手数おかけしますがご教授頂けたら幸いです。 以下、コードです。 Xcodeは5.0を使用しています。 @property (nonatomic, retain) NSArray *arrayOriginal; @property (nonatomic, retain) NSMutableArray *arForTable; //ここで、プロパティリストを読み込んでいます。 NSDictionary *dTmp=[[NSDictionary alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"data1" ofType:@"plist"]]; self.arrayOriginal=[dTmp valueForKey:@"Objects"]; self.arForTable=[[NSMutableArray alloc] init] ; [self.arForTable addObjectsFromArray:self.arrayOriginal]; - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ; } cell.textLabel.text=[[self.arForTable objectAtIndex:indexPath.row] valueForKey:@"name"]; return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; NSDictionary *d=[self.arForTable objectAtIndex:indexPath.row]; if([d valueForKey:@"Objects"]) { NSArray *ar=[d valueForKey:@"Objects"]; BOOL isAlreadyInserted=NO; for(NSDictionary *dInner in ar ){ NSInteger index=[self.arForTable indexOfObjectIdenticalTo:dInner]; isAlreadyInserted=(index>0 && index!=NSIntegerMax); if(isAlreadyInserted) break; } if(isAlreadyInserted) { //miniMizeThisRowでAやBが閉じるようにしています。 [self miniMizeThisRows:ar]; } else { NSUInteger count=indexPath.row+1; NSMutableArray *arCells=[NSMutableArray array]; for(NSDictionary *dInner in ar ) { [arCells addObject:[NSIndexPath indexPathForRow:count inSection:0]]; [self.arForTable insertObject:dInner atIndex:count++]; } //ここでAやBが開いて相当するItemがでるようにしています。 [tableView insertRowsAtIndexPaths:arCells withRowAnimation:UITableViewRowAnimationFade]; } } //閉まる際のメソッドです。 -(void)miniMizeThisRows:(NSArray*)ar{ for(NSDictionary *dInner in ar ) { NSUInteger indexToRemove=[self.arForTable indexOfObjectIdenticalTo:dInner]; NSArray *arInner=[dInner valueForKey:@"Objects"]; if(arInner && [arInner count]>0){ [self miniMizeThisRows:arInner]; } if([self.arForTable indexOfObjectIdenticalTo:dInner]!=NSNotFound) { [self.arForTable removeObjectIdenticalTo:dInner]; [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject: [NSIndexPath indexPathForRow:indexToRemove inSection:0] ] withRowAnimation:UITableViewRowAnimationFade]; }}} プロパティリストです。 <dict> <key>Objects</key> <array> <dict> <key>name</key> <string>A</string> <key>level</key> <integer>0</integer> <key>Objects</key> <array> <dict> <key>name</key> <string>Item1</string> <key>level</key> <integer>3</integer> </dict> <dict> <key>name</key> <string>Item2</string> <key>level</key> <integer>1</integer> </dict> <dict> <key>name</key> <string>Item3</string> <key>level</key> <integer>1</integer> </dict> </array> </dict> <dict> <key>name</key> <string>B</string> <key>level</key> <string></string> <key>Objects</key> <array> <dict> <key>name</key> <string>Item1</string> <key>level</key> <integer>0</integer> </dict> <dict> お手数おかけしまして恐縮ですが、宜しくお願い致します。

  • PHPを使ったPOSTについて教えてください。

    <body> <form action="" method="post"> <select id="list" name="list" > <option value="">選択してください</option> <option value="ichigo">いちご</option> <option value="orange">オレンジ</option> </select> <input type="text" size="30" id="word" name="word" > <input type="submit" value="検索"> </form> <?php $array = array(); $array['green'] = 'グリーン'; $array['red'] = 'レッド'; if (isset($_REQUEST['word'])) { $array ['key']=$_REQUEST['word']; } if (isset($_REQUEST['list'])) { $array ['List']=$_REQUEST['list']; } print_r($array); ?> </body> これを表示した場合、はじめのページでは Array ( [green] => グリーン [red] => レッド ) と表示されますが、フォームを実行すると、このように表示されます。 Array ( [green] => グリーン [red] => レッド [key] => [List] => ) これを、もしkeyやListの値が何も入力されなかった場合、listで言えば「選択してください」が選択されで実行された場合、[key] =>や [List] =>を表示しないと言うことはできますか? 例えばlistをデフォルトの「選択してください」のまま選択せず、テキスト欄に「テキスト」と入力したら、 Array ( [green] => グリーン [red] => レッド [key] => テキスト) とこのように[List] =>は省きたいです。 そのためにissetを使ったつもりでしたが、うまくいきませんでした。 どうしたら良いでしょうか?教えてください、よろしくお願いします。

    • 締切済み
    • PHP
  • array_combine()について

    http://phpspot.net/php/man/php/function.array-combine.html こちらを参考に配列のまとめ方と取り出し方を模索中です。 $a = array('green', 'red', 'yellow'); $b = array('avocado', 'apple', 'banana'); $c = array_combine($a, $b); ↑こちらは、 foreach($c as $key => $value){ ~ } ↑このような感じでそれぞれ取り出せると思います。 ここまではいけました。 この状態で対象が3つ以上になった場合は、どういう対応方法があるのでしょうか。 $a = array('green', 'red', 'yellow'); $b = array('avocado', 'apple', 'banana'); $hoge = array('100', '150', '80'); array_combine()でできるのでしょうか。 他の関数を使うのでしょうか。 不慣れですみません。 アドバイスいただけますとうれしいです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 再帰の仕方

    現在配列の出力結果が↓なのですがこれを array(2) { [0]=> string(6) "orange" [1]=> array(2) { [0]=> string(6) "apple" [1]=> array(2) { [0]=> string(6) "banana" [1]=> array(2) { [0]=> string(10) "Strawberry" } } } } ↓こっちのように変えたい場合の処理がどうしてもできません。 array(2) { [0]=> string(6) "orange" [1]=> string(6) "apple" [2]=> string(6) "banana" [3]=> string(10) "Strawberry" } 今自分がやってる途中のものです↓ $fruit = array("orange", array("apple", array("banana", array("Strawberry")))); function first_array($fruit) { foreach($fruit as $key => $value) { if(! is_array($value) === true ) { echo $value; } else { first_array($value); } } } $new_array = first_array($fruit); echo で orangeapplebananaStrawberry と表示はされるのですが、 配列に入れる方法がわかりません。 普通にこの部分を ~ if(! is_array($value) === true ) { $array[] = $value; } ~ とすると上書きされてしまっているのかな? 一個しかデータが残ってないのです・・・。 ご教授ください。

    • ベストアンサー
    • PHP
  • Objecive-C

    NSDictionary *row1 = [[NSDictionary alloc]initWithObjectsAndKeys:            @"MacBook",@"Name",@"White",@"Color",nil]; NSDictionary *row2 = [[NSDictionary alloc]initWithObjectsAndKeys:        @"MacPro",@"Name",@"Silver",@"Color",nil]; NSArray *array● = [[NSArray alloc]initWithObjects:row1,row2,nil]; これをplistを使って実現させようと思ったのですが、 NSString *path =[[NSBundle mainBundle]pathForResource:@"Celldata" ofType:@"plist"]; NSArray *array○ = [[NSArray alloc]initWithContentsOfFile:path]; *array●と*array○は同様の配列で実現可能ですか? plistに問題があるのでしょうか?。 plistは、下記です。 key Type Value Root Dictionary row1 Dictionary ( 2 items) Name String MacBooc Color String White

  • 配列に要素を追加する方法

    PHP勉強中です。よろしくお願いします。 配列$colorに$sizeのsizeを追加したいのですが、 たとえば下記の場合どのようにすればよいのでしょうか? $color Array ( [0] => Array ( [serial] => 15802 [color] => red ) [1] => Array ( [serial] => 15802 [color] => black ) [2] => Array ( [serial] => 15802 [color] => blue ) [3] => Array ( [serial] => 15802 [color] => pink ) [4] => Array ( [serial] => 15802 [color] => glay ) [5] => Array ( [serial] => 15802 [color] => green ) ) $size Array ( [0] => Array ( [serial] => 15802 [size] => 5.5 ) [1] => Array ( [serial] => 15802 [size] => 6.5 ) [2] => Array ( [serial] => 15802 [size] => 8.0 ) [3] => Array ( [serial] => 15802 [size] => 2.5 ) [4] => Array ( [serial] => 15802 [size] => 1.0 ) [5] => Array ( [serial] => 15802 [size] => 3.2 ) ) $color Array ( [0] => Array ( [serial] => 15802 [color] => red [size] => 5.5 ) [1] => Array ( [serial] => 15802 [color] => black [size] => 6.5 ) [2] => Array ( [serial] => 15802 [color] => blue [size] => 8.0 ) [3] => Array ( [serial] => 15802 [color] => pink [size] => 2.5 ) [4] => Array ( [serial] => 15802 [color] => glay [size] => 1.0 ) [5] => Array ( [serial] => 15802 [color] => green [size] => 3.2 ) )

    • ベストアンサー
    • PHP
  • php foreach 配列のソート方法

    配列のソート方法の仕方がわからず調べているのですが、なかなかできず困っております。 どなたかご教授お願いいたします。 array(5) { [0]=> array(3) { ["id"]=> string(1) "1" ["size"]=> string(5) "100" ["message"]=> string(7) "テスト1" } [1]=> array(3) { ["id"]=> string(1) "2" ["size"]=> string(5) "200" ["message"]=> string(7) "テスト2" } [2]=> array(3) { ["id"]=> string(1) "3" ["size"]=> string(5) "300" ["message"]=> string(7) "テスト3" } [3]=> array(3) { ["id"]=> string(1) "4" ["size"]=> string(5) "400" ["message"]=> string(7) "テスト4" } [4]=> array(3) { ["id"]=> string(1) "5" ["size"]=> string(4) "500" ["message"]=> string(7) "テスト5" } [5]=> array(3) { ["id"]=> string(1) "6" ["size"]=> string(5) "600" ["message"]=> string(7) "テスト6" } } foreach ($data as $key => $val) { ・ ・ ・ } となっております。foreachでループさせたときにidの降順?(1→6に表示)になるのですが、sortで昇順?(6→1に表示)にしたいです。 お分かりの方がいらっしゃいましたらお願いいたします。

    • 締切済み
    • PHP

専門家に質問してみよう