さて、個人情報データを管理するクラスを作ったら、

テーブルオブジェクトを管理するコントローラーを作ります。


テーブル表示まで後もうちょっとです。

さて、「class」の新規追加をします。

ここ、非常に悩んだ。。。。

参考書籍はちょっと古いのか、Xcodeのバージョンがアップしているので、

本のような項目が無かったので思ったようにすすめなかった

最新のXcodeにあわせると以下の通りなるので、このように追加します。

iPhone OS > Cocoa Touch Class > UIViewController subclass を選択

無知の状態からiPhoneアプリ開発に挑んでみる-8-6-1

ファイル名はContactListViewController.mとでもしておきます。

同時にContactListViewController.hも作成しときます。

無知の状態からiPhoneアプリ開発に挑んでみる-8-6-2


では、ContactListViewController.h の中身を書きます。

下のように、足らないとこを追加します。


#import < UIKit/UIKit.h>
#import "PersonalDataManager.h" //PersonalDataManagerクラスのヘッダファイルをインポート

@interface ContactListViewController : UITableViewController {
  PersonalDataManager *manager;  //PersonalDataManagerのインスタンスを保持するメンバ変数の宣言
}

@end


ほんでは、ContactListViewController.m の中身を書きます。

- (id)initWithStyle:(UITableViewStyle)style の部分がコメントアウトされてるんで、
コメントアウトしないで、下の様に編集!
initWithStyleは初期化メソッドでオーバーライドしてます。



- (id)initWithStyle:(UITableViewStyle)style {
   //初期化時にPersonalDataManagerのオブジェクトを取得するようにする
   // Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.

     if ((self = [super initWithStyle:style])) {
       manager = [PersonalDataManager sharedPersonalDataManager];
     }
     return self;
}




cellForRowAtIndexPathの部分を実装しますが、

無知の状態からiPhoneアプリ開発に挑んでみる-8-6-4

↑このもともとあるメソッドの下の方をちょろっと下の様に編集します。


//表示するテーブルの各セクションの行数を問い合わせる
// Customize the appearance of table view cells.
- (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] autorelease];
    }
    
    // Set up the cell...
    cell.textLabel.text = [[manager loadPersonalDataAtIndex:indexPath.row] name];
    // [cell setTextLabel:(UILabel *):[[manager loadPersonalDataAtIndex:indexPath.row] name]];
    return cell;
}





で、途中に下の図のようなところがあるので、
無知の状態からiPhoneアプリ開発に挑んでみる-8-6-3
下のコードの様に修正してみます。


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return 1;
}
   //表示するテーブルの各セクションの行数を問い合わせる


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    return [manager countOfPersonalData];;
}



ここまできたら、実行してエラーがない事を確認!

次回は画面にテーブル表示させるぞ。( ̄▽+ ̄*)

にほんブログ村 携帯ブログ iPhoneへ
にほんブログ村

 > 次のテーマ テーブルをつくっていこう。
 > テーブルのデータを管理するクラスを作ってみる
 > テーブルビューのコントローラーを作ってみる。(★この記事★)
 > ついにテーブルの表示完成!
 > テーブルをいじくる。
 > テーブルを本当にいじくる
 > テーブルを本当に実装を始めるよ。
 > テーブルを改造しましょ。
 > テーブル改造のつづきやけど。。
 > テーブルのセルに電話番号を追加してみる。
 > モード切り替え用ボタンの追加
 > セル(データ)の削除処理と並び替え!
 > テーブルいじくりも大詰め?
 
さてさて、タイトル通りテーブルのデータを管理するクラスを作ってみようかと思う。

前回は下の4つのファイルを作りました。

PersonalData.h
PersonalData.m
PersonalDataManager.h
PersonalDataManager.m


PersonalDataたちは個人情報データを表現するクラス。
要素として「名前」を実装しました。

今日はPersonalDataManagerたちを実装しましょ。
まずは、PersonalDataManager.hから・・・

青枠の部分が追加した部分です。
無知の状態からiPhoneアプリ開発に挑んでみる-8-4-1
#import < Foundation/Foundation.h>
#import "PersonalData.h"

@interface PersonalDataManager : NSObject {
NSMutableArray *personalDataList;
}

+ (PersonalDataManager *)sharedPersonalDataManager;
- (PersonalData *)loadPersonalDataAtIndex:(NSUInteger)index;
- (NSUInteger)countOfPersonalData;

@end




つぎは、PersonalDataManager.mです。
もともとのソースはこれだけ↓
無知の状態からiPhoneアプリ開発に挑んでみる-8-4-2

これらのメソッドやなんやらを追加します。

が、今回は今までの様にソースコードの画像はアップしません。
なんでかというと、でかいからw
まず、
#import "PersonalDataManager.h"
の下にこれを書きます。
これは個人情報データの生成を行うプライベートメソッドの宣言。

@interface PersonalDataManager (PrivateMethods)

- (NSMutableArray *)generatePersonalData;

@end



次に大量コードですが、、
@implementation PersonalDataManager
と、最後の@endの間に書きます。
緑色のコメントが簡単な説明ですー。


static PersonalDataManager *sharedInstance; //自身のオブジェクトを保持するためのクラス変数の宣言

+ (PersonalDataManager *)sharedPersonalDataManager { //オブジェクトの取得を提供するメソッド
    
    if (sharedInstance == nil) {
        sharedInstance = [[PersonalDataManager alloc] init];
    }
    
    return sharedInstance;
}

- (id)init { //initメソッドのオーバーライド
    
    if ((self = [super init]) == nil) {
        return nil;
    }
    
    personalDataList = [self generatePersonalData];
    
    return self;
}
- (void)dealloc { //deallocメソッドのオーバーライド
    
    [personalDataList release];
    [super dealloc];
}
- (PersonalData *)loadPersonalDataAtIndex:(NSUInteger)index { //指定した1件のデータオブジェクト取得するメソッド
    
    if (index >= 0 && index < [personalDataList count]) {
        return [personalDataList objectAtIndex:index];
    }
    
   return nil;
}
- (NSUInteger)countOfPersonalData { //データオブジェクトの個数を取得するメソッド
    
    return [personalDataList count];
}
- (NSMutableArray *)generatePersonalData { //個人情報データの生成を行うプライベートメソッド
    
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    @try {
        // names
        NSArray *names = [NSArray arrayWithObjects:
                          @"愛 飢え夫",
                          @"下記 句け子"",
                          @"指し 周世僧"",
                          @"達 津手斗"",
                          @"何 抜寝乃"",
                          @"葉比 負へ帆"",
                          @"真美 無眼藻"",
                          @"揶 由余"",
                          @"等裏 流列路"",
                          @"輪 ヲん"",
                          nil];
        
        NSMutableArray *tempDataList
        = [[NSMutableArray alloc] initWithCapacity:[names count]];
        
        for (int i = 0; i < [names count]; i++) {
            PersonalData *personalData = [[[PersonalData alloc] init] autorelease];
            personalData.name = [names objectAtIndex:i];
            [tempDataList addObject:personalData];
        }
        
        return tempDataList;
    }
    @finally {
        [pool release];
    }
    
    return nil;
}




な、長い。

とりあえず、実行してエラーがない事を確認!

画面にテーブル表示させるまであとすこしー!!!

にほんブログ村 携帯ブログ iPhoneへ
にほんブログ村

 > 次のテーマ テーブルをつくっていこう。
 > テーブルのデータを管理するクラスを作ってみる(★この記事★)
 > テーブルビューのコントローラーを作ってみる。
 > ついにテーブルの表示完成!
 > テーブルをいじくる。
 > テーブルを本当にいじくる
 > テーブルを本当に実装を始めるよ。
 > テーブルを改造しましょ。
 > テーブル改造のつづきやけど。。
 > テーブルのセルに電話番号を追加してみる。
 > モード切り替え用ボタンの追加
 > セル(データ)の削除処理と並び替え!
 > テーブルいじくりも大詰め?
 
さて、みなさんお待たせしました。(待ってたと信じてる)


テーブルを作っていきますよ。

 > テーブルとはこんなもの(前の記事)

では、Xcode

「新規プロジェクト」⇒「iPhone OS」⇒「Application」⇒「Navigation-based Application」

で始めていきましょう。

プロジェクト名は「TableViewSample01」とでもしとこうかな。

テーブルのデータですが、プログラム内でコーディングして、それを利用していくことにします

ホントは外部から取り込むのが普通ですが、簡単のために。(みたいに本に書いてある。)

とりあえずの目標↓
無知の状態からiPhoneアプリ開発に挑んでみる-8-2-1

うまくいけば、これを発展させていきたいとおもってます。


まず、「Classes」グループからいつのもように「追加」→「新規ファイル」と進む新規クラスを追加します。
選ぶのは、「iPhone OS」「Cocoa Touch Class」 「Objective-C class」として、下図を参考に・・・。「.h」ファイルも同時に作っておきます。
無知の状態からiPhoneアプリ開発に挑んでみる-8-2-2

クラス名は個人情報データを表現するクラスなので、「PersonalData.m」とします、

無知の状態からiPhoneアプリ開発に挑んでみる-8-2-3

全く同じ様にクラスファイルを追加して、こちらはデータを取得したりする処理を実装するので「PersonalDataManager.m」としておきます。
無知の状態からiPhoneアプリ開発に挑んでみる-8-2-4

で、追加した結果こんなんになります。
無知の状態からiPhoneアプリ開発に挑んでみる-8-2-5

左側に追加した4ファイルがありますね。



今日は「PersonalData.h」「PersonalData.m」を実装してみることにします。



まず、「PersonalData.h」から、
たったこれだけを実装します。
これは、メンバー変数を宣言して、そのメンバー変数についてプロパティの宣言を行ってます。
無知の状態からiPhoneアプリ開発に挑んでみる-8-2-6

  NSString *name;


  @property (nonatomic, retain) NSString *name;



次に、「PersonalData.m」から、
たったこれだけを実装します。
「PersonalData.h」に追加したプロパティについて、実装ディレクティブを追加してます。
無知の状態からiPhoneアプリ開発に挑んでみる-8-2-7

  @synthesize name;




実行してみて、エラーがない事を確認!

もちろんまだ画面はなんにもでませんけどね。

にほんブログ村 携帯ブログ iPhoneへ

 > 次のテーマ テーブルをつくっていこう。(★この記事★)
 > テーブルのデータを管理するクラスを作ってみる
 > テーブルビューのコントローラーを作ってみる。
 > ついにテーブルの表示完成!
 > テーブルをいじくる。
 > テーブルを本当にいじくる
 > テーブルを本当に実装を始めるよ。
 > テーブルを改造しましょ。
 > テーブル改造のつづきやけど。。
 > テーブルのセルに電話番号を追加してみる。
 > モード切り替え用ボタンの追加
 > セル(データ)の削除処理と並び替え!
 > テーブルいじくりも大詰め? 


 <<前のテーマ アラートとか画面の遷移とかやってみる!