UITableView重新加载-Xcode 5
我使用的是嵌入在导航控制器中的UITableView(带有表格单元格)。当应用程序启动时,将读取SQLite3数据库中的数据并将其添加到表格单元格中 我已经做了一个按钮(在导航栏上),它将引导用户进入一个屏幕,在那里他可以输入新数据。当用户单击导航控制器自动添加的“返回”按钮时,“保存”即发生 当用户返回到起始页时,数据不会被重新加载,因此在他们重新启动应用程序之前,新条目不可见 当数据返回视图时,刷新数据的最佳方式是什么UITableView重新加载-Xcode 5,uitableview,ios7,xcode5,viewdidload,Uitableview,Ios7,Xcode5,Viewdidload,我使用的是嵌入在导航控制器中的UITableView(带有表格单元格)。当应用程序启动时,将读取SQLite3数据库中的数据并将其添加到表格单元格中 我已经做了一个按钮(在导航栏上),它将引导用户进入一个屏幕,在那里他可以输入新数据。当用户单击导航控制器自动添加的“返回”按钮时,“保存”即发生 当用户返回到起始页时,数据不会被重新加载,因此在他们重新启动应用程序之前,新条目不可见 当数据返回视图时,刷新数据的最佳方式是什么 #import "lucidViewController.h" #imp
#import "lucidViewController.h"
#import "lucidCell.h"
@interface lucidViewController () {
}
@end
@implementation lucidViewController
@synthesize titleData,descrData,idKeyData;
- (void)viewDidLoad {
self.myTableView.dataSource = self;
self.myTableView.delegate = self;
[self openDB];
[self createTable:@"dreams" withField1:@"idKey" withField2:@"title" withField3:@"description"];
titleData = [[NSMutableArray alloc] init];
descrData = [[NSMutableArray alloc] init];
idKeyData = [[NSMutableArray alloc] init];
[self loadData];
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void) loadData {
NSString *sql = [NSString stringWithFormat:@"SELECT * FROM dreams"];
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(dataBase, [sql UTF8String], -1, &statement, nil) == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW) {
char *field1 = (char *) sqlite3_column_text(statement, 0);
NSString *field1Str = [[NSString alloc]initWithUTF8String:field1];
char *field2 = (char *) sqlite3_column_text(statement, 1);
NSString *field2Str = [[NSString alloc]initWithUTF8String:field2];
char *field3 = (char *) sqlite3_column_text(statement, 2);
NSString *field3Str = [[NSString alloc]initWithUTF8String:field3];
[idKeyData addObject:field1Str];
[titleData addObject:field2Str];
[descrData addObject:field3Str];
}
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (NSString *) filePath {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
return [[paths objectAtIndex:0] stringByAppendingPathComponent:@"lucid.sql"];
}
- (void) openDB {
if (sqlite3_open([[self filePath] UTF8String], &dataBase) != SQLITE_OK) {
sqlite3_close(dataBase);
NSAssert(0, @"Database kan niet geopend worden");
} else {
NSLog(@"Database is geopend!");
}
}
- (void) createTable:(NSString *)tableName withField1:(NSString *)field1 withField2:(NSString *)field2 withField3:(NSString *)field3 {
char *error;
NSString *sqlStatement = [NSString stringWithFormat:
@"CREATE TABLE IF NOT EXISTS '%@'('%@' TEXT PRIMARY KEY, '%@' TEXT, '%@' TEXT);",tableName,field1,field2,field3];
if (sqlite3_exec(dataBase, [sqlStatement UTF8String], NULL, NULL, &error) != SQLITE_OK) {
sqlite3_close(dataBase);
NSLog(@"Table kan niet aangemaakt worden..");
} else {
NSLog(@"Table aangemaakt!");
}
}
- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [titleData count];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
return 0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
lucidCell *Cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!Cell) {
Cell = [[lucidCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
Cell.descrLabel.text = [self.descrData objectAtIndex:indexPath.row];
Cell.titleLabel.text = [self.titleData objectAtIndex:indexPath.row];
return Cell;
}
@end
此处添加新数据:
#import "newViewController.h"
@interface newViewController ()
@end
@implementation newViewController
@synthesize addNewDream;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad {
[self openDB];
[self genRandStringLength:20];
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (NSString *) filePath {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
return [[paths objectAtIndex:0] stringByAppendingPathComponent:@"lucid.sql"];
}
- (void) openDB {
if (sqlite3_open([[self filePath] UTF8String], &dataBase) != SQLITE_OK) {
sqlite3_close(dataBase);
NSAssert(0, @"Database kan niet geopend worden");
} else {
NSLog(@"Database is geopend!");
}
}
-(NSString *) genRandStringLength: (int) len {
NSString *letters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
NSMutableString *randomString = [NSMutableString stringWithCapacity: len];
for (int i=0; i<len; i++) {
[randomString appendFormat: @"%C", [letters characterAtIndex: arc4random() % [letters length]]];
}
return randomString;
}
- (void) viewWillDisappear:(BOOL)animated {
NSString *dreamText = addNewDream.text;
NSString *idKey = [self genRandStringLength:25];
NSDate *myDate = [NSDate date];
NSDateFormatter *df = [NSDateFormatter new];
[df setDateFormat:@"dd/MM/yyyy, hh:mm"];
NSString *title = [df stringFromDate:myDate];
if (![dreamText isEqualToString:@""]){
NSString *statement = [NSString stringWithFormat:@"INSERT INTO dreams ('idKey','title','description') VALUES ('%@','%@','%@')",idKey,title,dreamText];
char *error;
if (sqlite3_exec(dataBase, [statement UTF8String], NULL, NULL, &error) != SQLITE_OK) {
sqlite3_close(dataBase);
NSAssert(0, @"Kan niet wegschrijven naar tabel");
} else {
NSLog(@"Table write succesvol!");
}
} else {
NSLog(@"Geen nieuwe droom ingevuld..");
}
}
#导入“newViewController.h”
@接口newViewController()
@结束
@newViewController的实现
@新梦想;
-(id)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil{
self=[super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
如果(自我){
//自定义初始化
}
回归自我;
}
-(无效)viewDidLoad{
[自我开放数据库];
[自身长度:20];
[超级视图下载];
//加载视图后执行任何其他设置。
}
-(无效)未收到记忆警告{
[超级记忆警告];
//处置所有可以重新创建的资源。
}
-(NSString*)文件路径{
NSArray*Path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,是);
返回[[paths objectAtIndex:0]stringByAppendingPathComponent:@“lucid.sql”];
}
-(void)openDB{
if(sqlite3_打开([[self filePath]UTF8String],&数据库)!=SQLITE_确定){
sqlite3_关闭(数据库);
NSAssert(0,@“数据库无法使用地理数据”);
}否则{
NSLog(@“数据库是geopend!”);
}
}
-(NSString*)genRandStringLength:(int)len{
NSString*字母=@“abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzo123456789”;
NSMutableString*randomString=[NSMutableString stringWithCapacity:len];
对于(int i=0;i您可以在ViewDidDisplay方法中刷新tableview和datamodel,如下所示:
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self loadData];
[self.myTableView reload];
}
您可以在ViewDidDisplay方法中刷新tableview和datamodel,如下所示:
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self loadData];
[self.myTableView reload];
}
太好了!每次只有数据添加到我的数组中,所以我的列表中有重复的条目。我应该每次清空数组还是有其他方法?通过将数组清空来修复它。谢谢。太好了!每次只有数据添加到我的数组中,所以我的列表中有重复的条目。我应该每次清空数组还是还有其他方法吗?通过使数组为空来修复它。谢谢。