Как обновить данные табличного представления на основе компонента строки, выбранного в представлении средства выбора - PullRequest
0 голосов
/ 02 января 2012

У меня есть приложение, в котором мне нужно сохранить напоминание на одной странице, а на другой - отобразить сохраненное напоминание. Я успешно это сделал, используя sqlite3!

На странице просмотра напоминаний пользователь может3 варианта просмотра, просмотр всего, что я уже реализовал, просмотр группы, которая содержит напоминания о 4 группах. Поскольку это всего лишь 4 группы, я создал 4 контроллера представления для 4 уникальных групп. Просто с помощью следующего запроса, который работал идеально:

 NSString *sqlQuery = [NSString stringWithFormat:@"select * from reminders WHERE grp = 'Friends'"];

Но у меня проблема с просмотром месячной страницы, которая содержит 12 компонентов строки в представлении выбора для выбора пользователем, то есть все 12 месяцев года:

Я обнаружилзапрос на получение всех напоминаний в определенном месяце, скажем, за месяц декабрь, я получил, используя следующий запрос:

NSString *sqlQuery = [NSString stringWithFormat:@"select * from reminders WHERE Date BETWEEN '2012-12-01' AND '2012-12-31'"];

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

Я обнаружилпохожий вопрос, но вопрос остался без ответа!

Обновить данные табличного представления на основе компонента строки, выбранного в представлении средства выбора

Я попытался создать экземпляр контроллера класса, гдепредставление выбора присутствует для контроллера представления, где отображаются данные:

ERViewEditController * viewEditController;

и при получении я использовал следующий код:

if(viewEditController.monthPicker selectedRowInComponent:0)
{
sqlQuery = [NSString stringWithFormat:@"select * from reminders WHERE Date BETWEEN '2012-01-01' AND '2012-01-31'"];
sql_stmt = [sqlQuery UTF8String];
}

else if(viewEditController.monthPicker selectedRowInComponent:1)
{
sqlQuery = [NSString stringWithFormat:@"select * from reminders WHERE Date BETWEEN '2012-02-01' AND '2012-02-31'"];
sql_stmt = [sqlQuery UTF8String];
}

и т. д.... и так далее в течение всех месяцев, затем использовал следующий код для отображения:

if (sqlite3_prepare_v2(self.remindersDB, sql_stmt, -1, &statament, NULL) == SQLITE_OK) 
        {
            while (sqlite3_step(statament) == SQLITE_ROW) 
            {             
                ReminderClass *remin = [[ReminderClass alloc]init];

                remin.Name = [[[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statament, 1)]autorelease];
                remin.Event = [[[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statament, 2)]autorelease];
                remin.Date = [[[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statament, 3)]autorelease];

                NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
                [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
                NSDate *date = [dateFormat dateFromString:remin.Date];
                [dateFormat setDateFormat:@"MMMM dd"];
                NSString *dateVal = [dateFormat stringFromDate:date];
                remin.Date = dateVal;

                [self.monthArray addObject:remin];
                [remin release];
            }

            sqlite3_finalize(statament);
        }

Теперь ничего не отображается: (

Как мне выполнить требование, может кто-нибудь помочьменя с вашими ценными предложениями!

Спасибо всем заранее:)

Ответы [ 4 ]

1 голос
/ 02 января 2012
  1. Выберите строку PickerView

  2. Сохранить в строку

  3. Доступ к этой строке в новом View Controller, где реализованы ваши методы делегатов UITableView

  4. cell.textLabel.text = str; где str - строка, которую вы выбрали в вашем окне выбора

  5. В методе нового View Controller, где вы обращаетесь к строке, напишите строку кода [table reloadData];

1 голос
/ 02 января 2012

Вы должны просто вызвать метод reloadData.

если в .h файле у вас есть объект TableView

UITableView *table;

Тогда, когда вы хотите обновить таблицу, вы должны написать,

[table reloadData];
0 голосов
/ 02 января 2012

Отладка кода путем вставки точки отладки в строку.

[self.monthArray addObject:remin];

затем вы должны написать следующий код, чтобы убедиться, что ваш массив пуст или имеет требуемые значения.

for(int i=0;i<[self.monthArray count];i++)
{
NSLog("Array ids :%@",[self.monthArray ObjectAtIndex:i])
}

если он выводит правильные значения в консоли, то вы должны написать следующую строку в методе делегата cellForRowAtIndex.

cell.textLabel.text = [self.monthArray objectAtIndex:indexPath.row];
...