gpt4 book ai didi

objective-c - 从 SQLite 数据库填充 SplitViewController 中的 UITableView 和 DetailsView

转载 作者:行者123 更新时间:2023-11-28 23:12:33 25 4
gpt4 key购买 nike

我的应用程序的主窗口显示一个 SplitViewController。左侧是显示名称的 TableView。右侧是一个 DetailsView,由 2 个显示姓名和年龄的 TextView 组成。

这是我为我的应用程序创建的 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.");
}
}

我想用名称填充 TableView。当在表格中选择一个名字时,SplitViewController 右侧的 TextView 将显示所选的名字和年龄。

我可以知道怎么做吗?

最佳答案

里面有很多问题。从它的声音来看,您想知道如何加载值、如何在 TableView 中显示它们、如何从 TableView 向主视图发送消息以及如何在主视图中显示内容。

首先为“用户”对象创建一个模型对象。然后在用户类中编写一个静态方法,您可以调用它返回一个数组中的所有用户。

获得数组后,使用标准的“cellForRowAtIndexPath”方法使用它来填充 tableView。一旦用户点击一个单元格,通过委托(delegate)方法将选定的用户对象传递到主视图,然后最终在您将在其中拥有的相关标签中显示其各种详细信息(姓名、年龄等)。

如果有任何不清楚的地方,请告诉我,我可以发布代码片段来帮助您解决问题。

编辑:所以.. 用于创建对象并将其加载到 tableViewController 中的代码片段(仅编写 .ms):

对于用户类

@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];
}

现在为您的 TableView 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 ”编程方法以及 TableView 的工作原理。开始需要做一些工作,但你会成功的。

希望对您有所帮助:)

关于objective-c - 从 SQLite 数据库填充 SplitViewController 中的 UITableView 和 DetailsView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7789373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com