Заполните UITableView и DetailsView в SplitViewController из базы данных SQLite - PullRequest
0 голосов
/ 17 октября 2011

В главном окне моего приложения отображается SplitViewController.Слева находится TableView, который отображает имена.Справа находится DetailsView, состоящий из 2 текстовых представлений, которые отображают имя и возраст.

Это база данных SQLite и таблица «USERS», которые я создал для своего приложения.

-(NSString *)dataFilePath
{
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *documentsDir = [paths objectAtIndex:0];
  return [documentsDir stringByAppendingPathComponent:@"Mydata.sqlite"];
}

- (void)viewDidLoad 
{
  [super viewDidLoad];

  if(sqlite3_open([[self dataFilePath] UTF8String], &database) != SQLITE_OK)
  {
    sqlite3_close(database);
    NSAssert(0, @"Failed to open database.");
  }

  char *err;
  NSString *sql = @"CREATE TABLE IF NOT EXISTS USERS" "(ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, AGE INTEGER);";
  if(sqlite3_exec(database, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK)
  {
    sqlite3_close(database);
    NSAssert(0, @"Failed to create table.");
  }
}

Iхотите заполнить TableView с именами.Когда имя выбрано в таблице, в текстовых окнах с правой стороны SplitViewController будет отображаться выбранное имя и возраст.

Могу ли я узнать, как это сделать?

1 Ответ

2 голосов
/ 17 октября 2011

Там есть ряд вопросов.Исходя из этого, вы хотите знать, как загрузить значения, как отобразить их в табличном представлении, как отправить сообщение из табличного представления в основное представление, а затем как отобразить содержимое в основном представлении.

Сначала создайте модельный объект для объекта «Пользователь».Затем в пользовательском классе напишите статический метод, который вы можете вызвать и который возвращает всех пользователей в массиве.

Получив массив, используйте его для заполнения tableView, используя стандартный метод cellForRowAtIndexPath.Как только пользователь нажмет на ячейку, передайте выбранный пользовательский объект в главное представление с помощью метода делегата, а затем, наконец, отобразите его различные данные (имя, возраст и т. Д.) В соответствующих ярлыках, которые у вас там будут.

Если что-то из этого неясно, дайте мне знать, и я могу опубликовать фрагмент кода, чтобы помочь вам.

РЕДАКТИРОВАТЬ: Итак .. фрагмент кода для создания объекта и загрузки его в tableViewController (только запись.ms):

Для класса User

@implementation User
@synthesize pk, name, age;

#pragma mark - Public Instance Methods
+ (NSArray *)getAllUsers
{
    sqlite3 *db = **However you get your db conn**
    sqlite3_stmt *statement = nil;
    NSMutableArray *userArray = [NSMutableArray array];

    NSString *fullQuery = @"SELECT * FROM User";

    const char *sql = [fullQuery UTF8String];

    if(sqlite3_prepare_v2(db, sql, -1, &statement, NULL)!=SQLITE_OK)
        NSAssert1(0, @"Error preparing statement '%s'", sqlite3_errmsg(db));
    else
    {
        while(sqlite3_step(statement) == SQLITE_ROW)
        {
            User *currentUser = [[User alloc] init];

            [User setPk:[NSString stringWithUTF8String:(const char*)sqlite3_column_text(statement, 0)]];
            [User setName:[NSString stringWithUTF8String:(const char*)sqlite3_column_text(statement, 1)]];
            [User setAge:[NSString stringWithUTF8String:(const char*)sqlite3_column_text(statement, 2)]];

            [userArray currentUser];
            [currentUser release];
        }
    }
    sqlite3_finalize(statement);
    sqlite3_close(db);

    return [NSArray arrayWithArray:userArray]; 
}

Теперь для вашей таблицы View Controller:

- (void)init
{
    self = [self init];
    if (self)
    {
        [self setUserArray:[User getAllUsers]];
    }
}

- (void)dealloc
{
    [super dealloc];
    [userArray release];
}

#pragma mark - Table view data source

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

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

- (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];
        [cell setSelectionStyle:UITableViewCellSelectionStyleBlue];
        [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
    }

    User *currentUser = [userArray objectAtIndex:indexPath.row];
    [[cell textLabel] setText:user.name];

    return cell;
}

Надеюсь, это даст вам представление о том, как действовать,Если вы не уверены в том, что делать дальше, я рекомендую вам ознакомиться с методологией программирования «Model View Controller» и с тем, как работают представления таблиц.Начать нужно немного, но вы доберетесь.

Надеюсь, это поможет:)

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