2011-04-07 127 views
0

我从SQLite数据库然而,在我的详细视图中的数据项的一个显示不正确读取数据。它显示了看起来像随机存储器的内容,即UIDeviceRGB ...(我有两个字符串,一个没有)。我无法解决为什么,但是当我运行调试时,它返回null。将数据加载到详细视图

这是我在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 

回答

0

或许,如果你使用你的%d格式化

代码[的NSString stringWithFormat:@ “%@”,加]。呼叫。

(%@通常是字符串,%d是双打)

我们的小讨论,athon后,这样就可以解决你得了什么病。

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

这将从数据库中提取文本值并将其转换为NSString *。 (希望)......

+0

试图加载详细视图时,现在感谢您回应但应用程序崩溃。我可以在它现在正地址项调试看到,但随后crashes.Any其他建议。@ omgz0r – wayne 2011-04-07 01:19:58

+1

释放你没有明确分配的东西有时是一个坏主意。也许如果你删除[地址发布]行。我知道它感觉不对,但是苹果方面的理由似乎是这样的,因为字符串在技术上被分配在stringWithFormat:方法内,它也将处理解除分配。 – omgz0r 2011-04-07 01:24:19

+0

我并不想成为有害生物的应用程序现在不崩溃,但它只返回0,而不是文字。@ omgz0r – wayne 2011-04-07 01:27:18

1

我有这样一个问题,读双重价值,有些价值的读权限,但一些读为0!我尝试了很多东西,但最终我的问题是通过定义全局变量来解决的。我已经在.m文件中定义了本地文件,但解决方案是在.h文件中定义它们,希望它能解决你的问题。 好运

相关问题