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

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

ただいまの
回答率

89.99%

plistを利用してTableViewを作成→セルをタップするとその詳細画面を表示

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 914
今お店情報アプリを作っています。
そこでplistを利用し、テーブルビュー(Dynamic Prototype)からテーブルビュー(Static cell)へ画面遷移するようにしたいのですが、最初のテーブルビューのセルをタップすると落ちてしまいます。
どのようにすればうまく表示できるかご教授お願いします。

まずMasterViewControllerから
.hファイル
#import <UIKit/UIKit.h>
#import "DetailViewController.h"


@interface MasterViewController : UITableViewController
<UITableViewDataSource,UITableViewDelegate>


@end

.mファイル
#import "MasterViewController.h"


@interface MasterViewController ()


@property (strong, nonatomic) NSArray *soba;

    @end

@implementation MasterViewController



  • (void)viewDidLoad {
    [super viewDidLoad];
    
    // Do any additional setup after loading the view, typically from a nib.
    self.soba=[NSArray arrayWithContentsOfURL:[[NSBundle mainBundle]URLForResource:@"sobaList" withExtension:@"plist"]];
    
}

  • (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    DetailViewController *vc=[DetailViewController new];
    vc.dic=[_soba objectAtIndex:indexPath.row];
    [self.navigationController pushViewController:vc animated:true];
}
#pragma mark - Segues

  • (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"showDetail"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        sobadayo *items=_soba[indexPath.row];
        [[segue destinationViewController] setDetailItem:items];
    }
}

#pragma mark - Table View

  • (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

  • (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return _soba.count ;
}

  • (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=[_soba objectAtIndex:indexPath.row];
    
    cell.imageView.image=[UIImage imageNamed:[listDict objectForKey:@"image"]];
    
    cell.textLabel.text = [listDict objectForKey:@"name"];
    cell.detailTextLabel.text=[listDict objectForKey:@"add"];
    
    return cell;
}


@end

次にDetailViewControllerです。
.hファイル

#import <UIKit/UIKit.h>
#import "sobadayo.h"

@interface DetailViewController : UITableViewController
@property (strong,nonatomic) sobadayo *sobadata;
@property NSDictionary *dic;

@property (strong, nonatomic) id detailItem;
@property (weak, nonatomic) IBOutlet UILabel *detailDescriptionLabel;
@property (weak, nonatomic) IBOutlet UILabel *pname;
@property (weak, nonatomic) IBOutlet UILabel *padd;
@property (weak, nonatomic) IBOutlet UILabel *ptel;


@end

そして.mファイル
#import "DetailViewController.h"

@interface DetailViewController ()

@end

@implementation DetailViewController

#pragma mark - Managing the detail item


  • (void)configureView {
    // Update the user interface for the detail item.
    
    
    sobadayo *items=self.detailItem;
    if (self.detailItem) {
        self.pname.text = items.ppname;
        self.padd.text=items.ppadd;
        self.ptel.text=items.pptel;
        
    }
}

  • (void)viewDidLoad {
    [super viewDidLoad];
   
    // Do any additional setup after loading the view, typically from a nib.
    [self configureView];
}

  • (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

*このDetailViewControllerの
pname,padd,ptel部分に選択されたセルのplist情報を表示させたいです。

表示とは別でNSObjectファイル
.hファイル
#import <Foundation/Foundation.h>

@interface sobadayo : NSObject

@property NSString *ppname;
@property NSString *ppadd;
@property NSString *pptel;
@property NSString *ppimage;

@end

.mファイル
#import "sobadayo.h"

@implementation sobadayo


@end

plistは
<plist version="1.0">
<array>
    <dict>
        <key>name</key>
        <string>ちゅるげー</string>
        <key>add</key>
        <string>北中城村</string>
        <key>tel</key>
        <string>098-882-8475</string>
        <key>img</key>
        <string>/Users/user/Desktop/沖縄そば 店写真/s_IMG_9676.PNG</string>
    </dict>
    <dict>
        <key>name</key>
        <string>けんぱーのすばやー</string>
        <key>add</key>
        <string>那覇市</string>
        <key>tel</key>
        <string>098-882-8475</string>
        <key>img</key>
        <string>/Users/user/Desktop/沖縄そば 店写真/s_IMG_9677.PNG</string>
    </dict>
    <dict>
        <key>name</key>
        <string>なび家バークレーズコート内</string>
        <key>add</key>
        <string>浦添市</string>
        <key>tel</key>
        <string>098-882-8476</string>
        <key>img</key>
        <string>/Users/user/Desktop/沖縄そば 店写真/s_IMG_9679.PNG</string>
    </dict>
    <dict>
        <key>name</key>
        <string>歓会門</string>
        <key>add</key>
        <string>浦添市</string>
        <key>tel</key>
        <string>098-882-8477</string>
        <key>img</key>
        <string>/Users/user/Desktop/沖縄そば 店写真/s_IMG_9678.PNG</string>
    </dict>
    <dict>
        <key>name</key>
        <string>浜屋そば</string>
        <key>add</key>
        <string>北谷町</string>
        <key>tel</key>
        <string>098-882-8478</string>
        <key>img</key>
        <string>/Users/user/Desktop/沖縄そば 店写真/IMG_9680.PNG</string>
    </dict>
    <dict>
        <key>name</key>
        <string>高江洲そば</string>
        <key>add</key>
        <string>西原町</string>
        <key>tel</key>
        <string>098-882-8479</string>
        <key>img</key>
        <string>/Users/user/Desktop/沖縄そば 店写真/IMG_9677.PNG</string>
    </dict>
    <dict>
        <key>name</key>
        <string>門の家</string>
        <key>add</key>
        <string>西原町</string>
        <key>tel</key>
        <string>098-882-8480</string>
        <key>img</key>
        <string>/Users/user/Desktop/沖縄そば 店写真/IMG_9676.PNG</string>
    </dict>
</array>
</plist>

以上です。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

もしかすると、
  • (void)setDetailItem:(id)newDetailItem {
}
これをDetailViewController.mにいれれば解決かもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/03 23:40

    askasashinさん、ありがとうございます。

    エラーは出ていません。そしてご教授いただいた(void)setDetailItem:(id)newDetailItem{}の挿入で画面遷移するようになりました!!本当にありがとうございます。

    でも、選択したセルによって遷移先のDetailViewControllerで名前、住所、電話番号といった内容が引き継がれていないのか初期設定した「Detail」から変わりません。

    これはDetailViewController.mでNSdictionary *dicから読み込む記述が足りないのでしょうか?

    よろしければご教授お願いいたします。

    キャンセル

  • 2015/06/04 20:58

    MasterViewをあまり使うことがないのでちょっとわからないですが、TabelViewから画面遷移する方法ならわかりますので、このサイトを参考にしてみてください。
    https://akira-watson.com/iphone/tableview_3_objective-c.html

    キャンセル

  • 2015/06/05 20:05

    askasashinさん

    有難うございます!!
    いただいたサイトを元にdidserectrowとprepareforsegueの中身を思いっきり変更し、detailview.hにも受け取るNSStringをそれぞれ追加したところちゃんと選択したセルの情報が挿入されるようになりました!!

    キャンセル

0

エラーとか表示されてはいないですか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる