UITableView重新加载-Xcode 5

UITableView重新加载-Xcode 5,uitableview,ios7,xcode5,viewdidload,Uitableview,Ios7,Xcode5,Viewdidload,我使用的是嵌入在导航控制器中的UITableView(带有表格单元格)。当应用程序启动时,将读取SQLite3数据库中的数据并将其添加到表格单元格中 我已经做了一个按钮(在导航栏上),它将引导用户进入一个屏幕,在那里他可以输入新数据。当用户单击导航控制器自动添加的“返回”按钮时,“保存”即发生 当用户返回到起始页时,数据不会被重新加载,因此在他们重新启动应用程序之前,新条目不可见 当数据返回视图时,刷新数据的最佳方式是什么 #import "lucidViewController.h" #imp

我使用的是嵌入在导航控制器中的UITableView(带有表格单元格)。当应用程序启动时,将读取SQLite3数据库中的数据并将其添加到表格单元格中

我已经做了一个按钮(在导航栏上),它将引导用户进入一个屏幕,在那里他可以输入新数据。当用户单击导航控制器自动添加的“返回”按钮时,“保存”即发生

当用户返回到起始页时,数据不会被重新加载,因此在他们重新启动应用程序之前,新条目不可见

当数据返回视图时,刷新数据的最佳方式是什么

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

太好了!每次只有数据添加到我的数组中,所以我的列表中有重复的条目。我应该每次清空数组还是有其他方法?通过将数组清空来修复它。谢谢。太好了!每次只有数据添加到我的数组中,所以我的列表中有重复的条目。我应该每次清空数组还是还有其他方法吗?通过使数组为空来修复它。谢谢。