Динамическое отображение данных из (время разработки неизвестно) базы данных SQLite в табличное представление - PullRequest
0 голосов
/ 16 мая 2011

Я пытаюсь получить табличное представление, отображающее содержимое универсальной таблицы SQLite. Пользователь выбирает файл SQLite во время выполнения (я не могу знать его структуру во время разработки). Затем я могу извлечь список всех таблиц, доступных в БД, вместе с их структурами (поля и типы полей в каждой таблице) и данными. Теперь ... Как мне показать их в табличном представлении?

Я действительно ценю Core Data, поэтому я пытаюсь использовать этот фреймворк. Я могу импортировать всю базу данных SQLite в «статической» модели базовых данных общего назначения. Он имеет три объекта: Таблица, Поле и Значение.

Каждый объект таблицы имеет отношение ко многим со своими полями. Каждое поле имеет отношение ко многим со значениями, которые оно имеет для каждой строки в таблице.

Я знаю, что это выглядит странно (и я с радостью принимаю радикально альтернативные предложения), но это работает: я могу импортировать все данные БД SQLite в модель Core Data, независимо от структуры БД.

Однако, чтобы представить данные из таблицы пользователю, я должен «перекомпактировать» все данные из полей и значений, относящихся к таблице, в одном табличном представлении, где для каждого поля требуется столбец (не говоря уже о форматирование сейчас, но если это сработает, я смогу передать все вопросы форматирования в NSFormatter). Как мне этого добиться? Другими словами: как программно создать столбцы в табличном представлении и связать их с динамически создаваемым контроллером массива?

Ответы [ 3 ]

0 голосов
/ 23 мая 2011

Я много сделал в моем текущем проекте.Я фактически строю модель / объект, который будет содержать мои данные SQLite.Затем я извлекаю данные, выполняя запрос, в цикле я создаю экземпляр объекта модели и извлекаю другой столбец в их правильные переменные.

Затем я добавляю каждый созданный объект в NSMutableArray.Я работаю в NSTableView с этим изменяемым массивом.Это довольно просто и очень быстро.Я даже сделал систему автозавершения с этим методом.

Я могу поделиться кодом, если вам нужно / хотите.

0 голосов
/ 23 мая 2011

Если вы хотите узнать список всех таблиц в базе данных SQLite, вы можете выполнить:

select tbl_name from sqlite_master where type='table';

И если вы знаете имя таблицы, вы можете получить информацию о ее схеме, выполнив:

pragma table_info(theTableName);

Как всегда, я предлагаю использовать оболочку Flying Meat Database для взаимодействия с базой данных SQLite. Это удивительно простой и удобный способ манипулировать информацией из файла SQLite.

Что касается отображения информации в NSTableView, было бы довольно легко удалить все столбцы из tableView и добавить новые столбцы, по одному для каждого поля в текущей таблице. Я сделал это сам, и это довольно просто.

0 голосов
/ 21 мая 2011

Не похоже, что CoreData особенно полезен для вас.Интересно, что у вас есть общая модель CD, представляющая произвольную БД, но не похоже, что вы используете или нуждаетесь в наиболее важных функциях CoreData, таких как сохранение, отмена управления и т. Д. При этом, учитывая ваши текущие настройки, выможно довольно легко изгнать из него tableView, реализовав методы / протокол dataSource для tableView, вместо использования привязок или NSArrayController.

Для этого можно использовать привязки, но вам придется вызывать привязку: методы для столбцов, которые вы создаете сами динамически.Затем вам нужно будет создать объект, который переопределяет valueForKey: метод и динамически находит требуемое значение поля.

...