質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

2回答

2480閲覧

[iphone]tableviewのcellにplistから取得した文字を貼る方法

pigretton

総合スコア27

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

1クリップ

投稿2015/01/28 06:35

![イメージ説明]WIDTH:600

xcode 6.0.1 でobjective-cを使い辞書アプリを製作しています。
内容はplistのkey"title"をテーブルビューのセルに貼り付けて、選択するとkey"contents"の文字を画面遷移先に表示するアプリです。
plistのpathを取得する方法は調べてわかったのですが、その後の、特定のkeyをセルに表示する方法がどうしてもうまくいかないので、ご助言をお願いいたします。
参考:https://akira-watson.com/iphone/tableview_2.html

————PropertyList.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>title</key> <string>核</string> <key>contents</key> <string>DNAを含有する</string> </dict> <dict> <key>title</key> <string>ミトコンドリア</string> <key>contents</key> <string>ATPを作る</string> </dict> <dict> <key>title</key> <string>ゴルジ体</string> <key>contents</key> <string>分泌に関与</string> </dict> <dict> <key>title</key> <string>葉緑体</string> <key>contents</key> <string>光合成を行う</string> </dict> <dict> <key>title</key> <string>液胞</string> <key>contents</key> <string>アントシアニンを含み浸透圧調節機能を持つ</string> </dict> </array> </plist> ———————————————————————————————————————-

————TableViewController.h—————————————————

#import <UIKit/UIKit.h>

@interface TableViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate>

@end

————————————————————————————————————————

————TableViewController.m—————————————————

#import "TableViewController.h"

@interface TableViewController (){
NSArray* arrayList;
}

@end

@implementation TableViewController

  • (void)viewDidLoad

{
[super viewDidLoad];
//plistのパスを取得してarrayの配列に入れる
NSString* dataFile = [[NSBundle mainBundle]pathForResource:@"PropertyList" ofType:@"plist"];
arrayList = [NSArray arrayWithContentsOfFile:dataFile];

}

  • (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{
// セクションの数を1個にしました
return 1;
}

  • (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{
// 行数を10にしました
return 10;
}

  • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if(cell==nil){ cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; } NSDictionary *listDict = [arrayList objectAtIndex:indexPath.row]; cell.textLabel.text = [listDict objectForKey:@"title"]; cell.textLabel.textColor = [UIColor cyanColor]; cell.textLabel.font = [UIFont boldSystemFontOfSize:14]; cell.detailTextLabel.textColor = [UIColor lightGrayColor]; return cell;

}

// セルの背景色を変える

  • (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell

forRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.backgroundColor = [UIColor clearColor];
}

@end

——————————————————————————————————————

至らぬ点があるとは思いますが、ご回答をお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

noppefoxwolfさん最後までお付き合い下さりありがとうございました!

今まではSTORYBORD上のViewControllerにTableviewを貼り付けて、Cellを貼り付けて、とやっていたところを、最初のViewControllerを素直に削除して、TableviewControllerを追加することで無事にRUNすることが出来ました!ありがとうございました!

投稿2015/02/10 15:21

pigretton

総合スコア27

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

lang

1-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 2return 10; 3}

にて、plistの配列要素数が5つなのに10を指定している事で、6つ目の要素にアクセスする際に存在していない為にエラー

*** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFArray objectAtIndex:]: index (5) beyond bounds (5)' *** First throw call stack:

が発生します。
修正方法は

lang

1-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 2return 5; 3}

と要素数をはみ出ないようにcellの生成数を指定する方法です。
もっとスマートに書くならば

lang

1-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 2return arrayList.count; 3}

と、arrayListの要素数の分だけ生成すれば絶対にこのエラーが発生することはありません。
以上です。

投稿2015/01/30 03:23

noppefoxwolf

総合スコア231

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pigretton

2015/01/31 10:06

リストをplistの要素の個数から取り出すことができるのですね! おかげさまでbuildすることが出来ました! ありがとうございます! しかし、 #import <UIKit/UIKit.h> #import "AppDelegate.h" int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));//←thread 1:signal SIGABRD } } このエラ−が出てきてしまいました。 頻繁に見かけるエラーなのですが、一度も意図して解決できたことがないので試行錯誤しています。
noppefoxwolf

2015/01/31 10:49

そのエラーに関しては、エラー箇所が分かりにくくケースバイケースなので解決には慣れが必要ですので、最初のうちは驚かれるかもしれません…! *** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFArray objectAtIndex:]: index (5) beyond bounds (5)' *** First throw call stack: エラーが出た場合は上記のように、***で始まるエラーメッセージが一緒に出力されていることがあります。 この部分を参照すると、解決に近づけますよ!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問