Как показать подробный вид в приложении для iPhone с помощью Sqlite - PullRequest
1 голос
/ 15 июня 2009

Я пробую приложения для iPhone от C #, мне очень трудно понять среду разработки iPhone.

Пока я могу вывести свои «Makes» в виде TableViewController. Теперь я хочу попасть в список «Модели» при выборе Makes. Может ли кто-нибудь помочь мне с примером кода.

Могу ли я использовать тот же TableViewController для отображения моделей автомобилей?

Я не создал ни одного Nibs, я делаю все в коде.

Sql для деталей будет: выберите заголовок из make, где parentkey =? Родительский ключ является первичным ключом make.

//  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);

В моих программах на C # я привык использовать первичный ключ для получения подробной записи, такой как GridView, это так же, как в iPhone?

1 Ответ

1 голос
/ 15 июня 2009

Здесь происходит пара вещей ...

1- Вы не выбираете первичный ключ обратно из своего SQL-запроса. Вам нужно изменить его на что-то вроде «SELECT pk, title ....», чтобы получить его.

2- Вы сохраняете заголовок только в своих марках. В идеале вы хотите создать некоторую структуру данных (возможно, класс), которую вы храните в своем массиве, чтобы впоследствии иметь доступ к PK.

3 - Вам нужно реализовать метод didSelectRowAtIndexPath в UITableView, чтобы определить, какая строка была затронута в табличном представлении.

После того, как вы решите эти вещи ... То, что вы хотите сделать, это вставить настроенный (то есть: вы сказали, что делают) ModelTableViewController на ваш контроллер навигации.

Возможно, вам стоит взглянуть на пример Elements на сайте разработчика. Это очень хороший пример использования SQLite для заполнения UITableView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...