Загрузка данных из базы данных в детальный вид - PullRequest
0 голосов
/ 07 апреля 2011

Я читаю данные из базы данных sqlite, однако в моем детальном представлении один из элементов данных отображается неправильно. Он показывает, что выглядит как случайная память, то есть UIDeviceRGB ... (У меня есть две строки, одна работает, другая нет). Я не могу понять, почему, но когда я запускаю отладку, она возвращает ноль.

Вот мой код в HydratedDetailData:

if (SQLITE_DONE != sqlite3_step(detailStmt)) {
    double add = sqlite3_column_double(detailStmt, 2);
    NSString *address = [NSString stringWithFormat:@"%@", add];
    self.ClubAddress = address;
    [address release];
}

Любая помощь работа будет принята с благодарностью!

код от Clubs.m

#import "Clubs.h"

static sqlite3 *database = nil;
static sqlite3_stmt *detailStmt = nil;


@implementation Clubs

@synthesize clubID, clubName, ClubAddress, isDirty, isDetailViewHydrated;

+(void) getInitialDataToDisplay:(NSString *)dbPath {
    SQLAppDelegate *appDelegate = (SQLAppDelegate *) [[UIApplication sharedApplication] delegate];

    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {

        const char *sql = "select clubID, clubName from clubNames";
        sqlite3_stmt *selectstmt;
        if (sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {
            while (sqlite3_step(selectstmt)== SQLITE_ROW) {
                NSInteger primaryKey = sqlite3_column_int(selectstmt, 0);
                Clubs *clubObj = [[Clubs alloc] initWithPrimaryKey:primaryKey];
                clubObj.clubName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];


                clubObj.isDirty = NO;

                [appDelegate.clubArray addObject:clubObj];
                [clubObj release];
            }
        }
    }
                   else
                   sqlite3_close(database);
                   }

                   +(void) finalizeStatements {
                       if (database) sqlite3_close(database);

                     } 


                   -(id) initWithPrimaryKey:(NSInteger) pk {
                       [super init];
                       clubID = pk;

                       isDetailViewHydrated = NO;
                       return self;
                   }



-(void) hydrateDetailViewData {
    if (isDetailViewHydrated) return; 

    if (detailStmt == nil) {
        const char *sql = "Select ClubAddress from clubNames Where clubID = ?";
         if (sqlite3_prepare_v2(database, sql, -1, &detailStmt, NULL) !=SQLITE_OK)
             NSAssert1(0, @"Error while creating detail view statment. '%s'", sqlite3_errmsg(database));
         }
    sqlite3_bind_int(detailStmt, 1, clubID);

    if (SQLITE_DONE != sqlite3_step(detailStmt)) {
        double add = sqlite3_column_double(detailStmt, 0);
        NSString *address = [NSString stringWithFormat:@"%d", add];
        self.ClubAddress = address;
    }
    else
        NSAssert1(0, @"Error while getting the address of club. '%s'", sqlite3_errmsg(database));
    sqlite3_reset(detailStmt);

    isDetailViewHydrated = YES;
    }


-(void) dealloc {
    [ClubAddress release];
    [clubName release];
    [super dealloc];
}


@end

Ответы [ 2 ]

1 голос
/ 19 октября 2011

У меня была такая проблема с чтением двойных значений, некоторые значения читаются правильно, а некоторые читаются как 0!Я перепробовал много вещей, но наконец моя проблема была решена путем определения переменных глобально.Я определил локально в файле .m, но решение было определить их в файле .h. Я надеюсь, что это может решить и ваш.удачи

0 голосов
/ 07 апреля 2011

Возможно, если вы использовали форматер% d в вашем [NSString stringWithFormat: @ "% @", add];call.

(% @ обычно для строк,% d для двойников)

После нашего небольшого обсуждения, это должно исправить то, что вас беспокоит.

if (SQLITE_DONE != sqlite3_step(detailStmt)) {
     char *db_text = sqlite3_column_text(detailStmt, 2);
      NSString *address = [NSString stringWithUTF8String: db_text];
      self.ClubAddress = address;
}

Это извлечет текстовое значение из базы данных и преобразует его в NSString *.(Надеюсь) ....

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