2009-06-15 12 views
1

iPhoneアプリを試していますが、C#のiPhoneアプリを試しています。iPhoneの開発環境を把握するのが非常に難しいです。Sqliteを使用してiPhone Appの詳細ビューを表示するには

これまでのところ、私は 'Makes'をTableViewControllerに登録することができました。私は今、Makesが選択されたときにリストアップされた 'Models'を取得したいと考えています。 サンプルコードを手伝ってもらえますか?

同じTableViewControllerを使用して車のモデルを表示できますか?

私はNibを作成していませんでしたが、私はコードですべてやっています。

詳細のSqlは次のようになります。select title from make where parentkey =? 親キーはmakeのプライマリキーです。私は、詳細レコードを取得するために、主キーを使用して使用しています私のC#のプログラムで

// MakeListTableViewController.h 
#import <UIKit/UIKit.h> 
#import "ModelTableViewController.h" 

@interface MakeListTableViewController : UITableViewController { 
NSMutableArray *makes; 
ModelTableViewController *modelTableViewController; 
UITabBarController *tabBarController; 
} 

@property (nonatomic, retain) ModelTableViewController * modelTableViewController; 
@property (nonatomic, retain) UITabBarController *tabBarController; 

@end 

// MakeListTableViewController.m 
#import "MakeListTableViewController.h" 
#import "ModelTableViewController.h" 
#import "sqlite3.h" 

static int MyCallback(void *context, int count, char **values, char **columns) 
{ 
NSMutableArray *categories = (NSMutableArray *)context; 
for (int i=0; i < count; i++) { 
    const char *titleCString = values[i]; 
    [makes addObject:[NSString stringWithUTF8String:titleCString]]; 
} 
return SQLITE_OK; 
} 

@implementation MakeListTableViewController 

- (void)loadNamesFromDatabase 
{ 
NSString *file = [[NSBundle mainBundle] pathForResource:@"CarList" ofType:@"sqlite"]; 
sqlite3 *database = NULL; 
if (sqlite3_open([file UTF8String], &database) == SQLITE_OK) { 
    sqlite3_exec(database, "select title from make where parentkey = 0", MyCallback, makes, NULL); 
} 
sqlite3_close(database); 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
//return 0; 
return [makes count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

// THIS IS WHERE I THINK THE INDEX IS PASSED ON FOR THE DETAILS 
UITableViewCell *cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:nil] autorelease]; 

cell.text = [makes objectAtIndex:indexPath.row]; 

//return cell; 
return [cell autorelease]; 
} 

- (id)initWithStyle:(UITableViewStyle)style 
{ 
self = [super initWithStyle:style]; 
if (self) { 
    makes = [[NSMutableArray alloc] init]; 
    [self loadNamesFromDatabase]; 
} 
return self; 
} 
- (void)dealloc { 
[makes release]; 
[super dealloc]; 
} 
@end 

SQL

CREATE TABLE make(pk INTEGER PRIMARY KEY, parentkey INTEGER DEFAULT 0, title TEXT); 

INSERT INTO make(title) VALUES('Honda'); 
INSERT INTO make(title) VALUES('Toyota'); 
INSERT INTO make(title) VALUES('Mazda'); 
INSERT INTO make(title) VALUES('Nissan'); 

INSERT INTO make(title, parentkey) VALUES('Civic', 1); 
INSERT INTO make(title, parentkey) VALUES('Accord', 1); 
INSERT INTO make(title, parentkey) VALUES('Corolla', 2); 

、GridViewのように、これは、それがまた、iPhoneで行われている方法ですか?

答えて

1

物事のカップルは、あなたが戻ってあなたのSQLクエリから主キーを選択していない...ここ

1-起こって。それを取得するには、 "SELECT pk、title ...."のように変更する必要があります。

2-あなたの作成したタイトルのみを保存しています。理想的には、後でPKにアクセスできるように、配列に格納するデータ構造(たぶんクラス)を作成したいと考えています。

3-テーブルビューでどの行がタッチされたかを判断するには、UITableViewでdidSelectRowAtIndexPathメソッドを実装する必要があります。

これらのことがうまくいけたら...あなたがしたいのは、設定された(つまり、あなたが言った通りに)ModelTableViewControllerをナビゲーションコントローラにプッシュすることです。

開発者サイトのElementsサンプルをご覧ください。これは、SQLiteを使ってUITableViewを生成する非常に良い例です。

関連する問題