I'm trying to have a Table View displaying the content of a generic SQLite table. The user selects a SQLite file at runtime (I cannot know its structure at design-time). I am then able to extract a list of all the tables available in the db, along with their structures (the fields and field-types in each table) and data. Now… How do I show them in a Table View?
I really appreciate Core Data, so I'm trying to use this framework. I can import all the SQLite db in a "static" general purpose Core Data model. It has three entities: Table, Field and Value.
Each table object has a to-many relationship with its fields. Each field has a to-many relationship with the values it has for each row in the table.
I know this looks weird (and I gladly accept radically alternative suggestions), but it works: I can import all the SQLite db data in a Core Data model, no matter how the db is structured.
In order to present the data from a table to the user, however, I should "recompact" all data from fields and values related to the table in a single table view, where a column is required for each field (let alone formatting now, but if this works I should be able to pass all formatting issues to NSFormatter). How can I achieve this? In other words: how do I programmatically create columns in a table view and bind them to a dynamically created array controller?
It doesn't look like CoreData is particularly useful here for you. It's interesting that you have a general CD model representing an arbitrary DB, but it doesn't seem like you are using or need the most important features of CoreData, such as persistence, undo management etc. That said, given your current setup, you can drive the tableView off of it pretty easily by implementing the dataSource methods / protocol for tableView, instead of using bindings or an NSArrayController.
It is possible to use bindings for this, but you would have to call the bind: methods on columns that you instantiate yourself dynamically. You would then need to create an object that overrides the valueForKey: method and finds the required field value dynamically.