UITableView не заполняется SQLite - PullRequest
0 голосов
/ 16 марта 2012

Я хочу создать список дел с SQLite, и я следую этому руководству: http://klanguedoc.hubpages.com/hub/IOS-5-How-To-Display-SQLite-Data-in-a-UITableView но это не работает! Симулятор запускается, и приложение открывается, но таблица пуста. Я делаю что-то неправильно? Я использую xcode 4.2 для снежного барса.

В файле .sqlite у меня есть текст строки, целочисленный приоритет и логическое завершение. Тем не менее, я только что реализовал «текст», чтобы упростить процесс.

Вот мой код:

//  Title.h
#import <Foundation/Foundation.h>
@interface Title : NSObject {
NSString *text; 
}

@property(nonatomic,copy) NSString *text;

@end

//TitleVC.h
#import <UIKit/UIKit.h>
#import <sqlite3.h>

@interface TitleVC : UITableViewController{

NSMutableArray *thelist;
sqlite3 *db;

}

@property (nonatomic,retain) NSMutableArray *thelist;

-(NSMutableArray *) toDo;

@end

//TitleVC.m
#import "TitleVC.h"  
#import "Title.h"
#import <sqlite3.h>

@implementation TitleVC
@synthesize thelist;

- (void)viewDidLoad
{
    [self toDo];
    [super viewDidLoad];
}



- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [self.thelist count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     static NSString *CellIdentifier = @"TitleCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

int rowCount = indexPath.row;

Title *title = [self.thelist objectAtIndex:rowCount];
cell.textLabel.text = title.text;

return cell;
}



-(NSMutableArray *) toDo{
thelist = [[NSMutableArray alloc] initWithCapacity:10];
@try{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *dbPath = [[[NSBundle mainBundle] resourcePath     ]stringByAppendingPathComponent:@"todo.sqlite"];
    BOOL success = [fileManager fileExistsAtPath:dbPath];
    if(!success)
    {
        NSLog(@"Cannot locate database file '%@'.",dbPath);
    }
    if(!(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK))
    {
        NSLog(@"An error has occured: %@",sqlite3_errmsg(db));
    }

    const char *sql = "SELECT * FROM todo";
    sqlite3_stmt *sqlStatement;
    if(sqlite3_prepare(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK)
    {
        NSLog(@"Problem with prepare statement: %@", sqlite3_errmsg(db));
    }else{
        Title *title = [[Title alloc] init];
        while (sqlite3_step(sqlStatement)==SQLITE_ROW){
            title.text = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,1)];
            [thelist addObject:title];
        }
    }
}
@catch (NSException *exception) {
    NSLog(@"Problem with prepare statement: %@", sqlite3_errmsg(db));
}
@finally {
    return thelist;
}
}

1 Ответ

0 голосов
/ 16 марта 2012

Если вы используете стандартный UITableView, tableView: numberOfRowsInSection: возвращает соответствующее значение? Что такое tableView: cellForRowAtIndexPath: возвращение? Я бы поставил точку останова в обоих местах и ​​проверил, чтобы методы даже вызывались.

Наконец, если вы используете файл .xib, есть ли соединение с UITableView?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...