2013-05-29 79 views
0

你好BLOB數據沒有顯示的UITextView

我在它的最後一部分stucked,請幫我就可以了。

在這個有三個視圖第一之一,書籍(在的UITableView名單,第二(在的UITableView)和最後一個是對於內容,這是文本格式(在UITextView)。

第二視圖它工作得很好。 問題是,當我在第二個視圖中選擇任何章節時,第三個視圖中的文本視圖不顯示任何內容。但是在輸出中顯示數字序列。

從數據庫中獲取數據並顯示到UITextView中的代碼。

NSMutableString *mStr = [NSMutableString stringWithFormat:@"select content from content where name = \"%@\" and chapterno = %@",chapName,chapNo]; 
const char *sql =(char *)[mStr UTF8String]; 

    sqlite3_stmt *sqlStmt; 
    if(sqlite3_prepare(dbContent, sql, -1, &sqlStmt, NULL)!=SQLITE_OK) 
    { 
     NSLog(@"prob with prepare statement: %s",sqlite3_errmsg(dbContent)); 
    } 
    else 
    { 
     while (sqlite3_step(sqlStmt)==SQLITE_ROW) { 
      len = sqlite3_column_bytes(sqlStmt, 0); 
      NSData *cData = [[NSData alloc]initWithBytes:sqlite3_column_blob(sqlStmt, 0) length:len]; 

      NSString *nstr = [NSString stringWithUTF8String:[cData bytes]]; 
      myTextView.text = nstr; 
    } 

在上述chapName第一視圖chapNo來選擇在第二視圖行。

內容表的樣子:

id  bookid  name  chapterno   content 

    1  1   abc   1   BLOB(size:4217) 
    2  1   abc   2   BLOB(size:3193) 
    3  1   abc   3   BLOB(size:3501) 

O/P進來的數字像這樣的長序列..

<0d0a3120 496e2074 68652062 6567696e 6e696e67 20476f64 20637265 61746564 20746865 20686561 76656e20 616e6420 74686520 65617274 682e0d0a...> 

這裏,文本內容我需要顯示在文本視圖。我在這裏錯過了什麼?

回答

0

我覺得問題是NSData到NSString的轉換。如果你的Sqlite字符串不是以null結尾的話,那麼使用下面的行進行轉換會有所幫助

NSString* nStr = [[NSString alloc] initWithData:cData 
            encoding:NSUTF8StringEncoding]; 
+0

感謝您的回覆,我已經在使用此之前嘗試過(NSString * nstr = [NSString stringWithUTF8String:[cData bytes]];)line..Didn't work out。 – mavericks

+0

不是。有顯着差異。如果字符串爲空,則應使用UTF8String。否則,我提到的.Sqlite可能不會終止。 – Vignesh

+0

此處cData包含nos序列<0d0a3120 496e2074 68652062 6567696e 6e696e67 20476f64 20637265 61746564 20746865 20686561 76656e20 616e6420 74686520 65617274 .... ans nStr具有空值.. – mavericks

0
NSMutableArray *ar=[[NSMutableArray alloc] init]; 
NSString *strQuery=[NSString stringWithFormat:@"select content from content where name = \"%@\" and chapterno = %@",chapName,chapNo]; 
const char *sql =[mStr UTF8String]; 

    sqlite3_stmt *sqlStmt; 
    if(sqlite3_open([self.dbPath UTF8String], &amp;database)==SQLITE_OK) 
    { 
     if(sqlite3_prepare_v2(database, query, -1, &amp;compiledStmt, NULL)==SQLITE_OK){ 
     while (sqlite3_step(sqlStmt)==SQLITE_ROW) { 
      len = sqlite3_column_bytes(sqlStmt, 0); 
      NSData *cData = [[NSData alloc]initWithBytes:sqlite3_column_blob(sqlStmt, 0) length:len]; 

      NSString *nstr = [NSString stringWithUTF8String:[cData bytes]]; 
      myTextView.text = nstr; 

     [ar addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:[NSData dataWithBytes:sqlite3_column_blob(compiledStmt, 1) length:sqlite3_column_bytes(compiledStmt, 1)],@"data1", 
            [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStmt, 2)],@"data2",nil]]; 
    } 
    else { 
       NSLog(@"Invalid query"); 
      } 
NSArray *arToReturn=([ar count]>;0)?[NSArray arrayWithArray:ar]:nil; 
     ar=nil; 
return arToReturn; 
    } 

請執行以下代碼,讓我通知genrated任何問題和查詢。

+0

如果您還想麻煩,請訪問我的博客文章.http: //goo.gl/5Q9zs –

+0

感謝您的迴應,我試過這個代碼...同一概率,沒有任何顯示錯誤是新的...問題是與準備stmt:綁定或列索引超出範圍 – mavericks

+0

你能否請啓用殭屍? –

0

我找到了最簡單的替代方式。

因爲,我從數據庫中取書名(從第一個表視圖)和章節號(從第二個表視圖)並將它傳遞給詳細信息視圖頁面。

比方說在這裏,我的書名數學,物理,geography..and章節中的數字(1,2,3 ...)。僅需要的東西,以保持文件名

[booknamechpatername.txt] 
#book name- Maths 
    chapter1-->> maths1.txt 
    chapter2-->> maths2.txt 
    ... 
#book name - Physics 
    chapter1 -->> physics12.txt 
    ... 
    geography21.txt 
...so on.. 

並將其拖到iphone資源或任何你想要的文件夾。 現在,將該文件存儲到字符串中並顯示到UITextView中。

-(void)loadFile{ 
    NSError *error; 
    NSArray *dirPath = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES); 
    NSString *docDir = [dirPath objectAtIndex:0]; 
    if (!docDir) { 
     NSLog(@"Doc dir not found"); 
    } 
    NSString *str = [[NSBundle mainBundle]pathForResource:[NSString stringWithFormat:@"%@%@",chapName,chapNo] ofType:@"txt"]; 

    NSString *content = [NSString stringWithContentsOfFile:str encoding:NSUTF8StringEncoding error:&error]; 
    myTextView.text = content; 
} 

,並調用它在viewDidLoad中

[self loadFile]; 

否則,這個鏈接https://github.com/jblough/bible-ios會有所幫助,如果你想只經過數據庫。