2013-02-09 30 views
1

我已經從SQLite數據庫讀取的應用程序,數據被讀取並使用此方法包括在對象....我的NSLog檢查加載數據SQlite的成htmlString的iOS

#import "ViewController1.h" 
#import "Ricetta.h" 
#import "AppDelegate.h" 


static sqlite3_stmt *leggiStatement = nil; 

@interface ViewController1() 

@end 

@implementation ViewController1 

@synthesize Webmain, oggetto2; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 



    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 


    //percorso file su cartella documents 
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDir = [documentPaths objectAtIndex:0]; 
    NSString *path = [documentsDir stringByAppendingPathComponent:@"Rice.sqlite"]; 

    //controllo se il file esiste 
    if(![[NSFileManager defaultManager] fileExistsAtPath:path]) 
    { 
     //se non esiste lo copio nella cartella documenti 
     NSString *pathLocale=[[NSBundle mainBundle] pathForResource:@"Rice" ofType:@"sqlite"]; 
     if ([[NSFileManager defaultManager] copyItemAtPath:pathLocale toPath:path error:nil] == YES) 
     { 
      NSLog(@"copia eseguita"); 
     }  
    } 





    [self personalizzaAspetto]; 


    [self carica_ID]; 




    // NSString * query = @" SELECT Immagine, Titolo, Descrizione FROM LIBRO"; 
    // NSArray * arrayQuery = [[NSArray alloc] initWithObjects:@"Immagine",@"Titolo",@"Descrizione",nil]; 
    // NSArray * arrayElementi = [self caricaValoriMain:query :arrayQuery]; 




     Webmain= [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, 320, 365)]; 
     NSString *htmlString =[NSString stringWithFormat:@"<html> \n" 
           "<head> \n" 
           "<style type=\"text/css\"> \n" 
           "body {font-family: \"%@\"; font-size: %@;}\n" 
           "</style> \n" 
           "</head> \n" 
           "<body><center><img src='%@'/></center></body><center><h1>%@</h1></center><body bgcolor=\"#FFFFFF\" text=\" #ffa500\">%@</body></html>" ,@"futura",[NSNumber numberWithInt:15],oggetto2.Immagine,oggetto2.Titolo,oggetto2.Descrizione]; 

     [Webmain loadHTMLString:htmlString baseURL:nil]; 

     [self.view addSubview:Webmain]; 







-(void)carica_ID{ 




     sqlite3 *database = NULL; 

     NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDir = [documentPaths objectAtIndex:0]; 
     NSString *dbPath = [documentsDir stringByAppendingPathComponent:@"Rice.sqlite"]; 

    if(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 
    { 
     if(leggiStatement==nil){ 
     const char *sql = "select Immagine,Titolo,Descrizione from LIBRO WHERE RicettaID=1"; 

     if(sqlite3_prepare_v2(database, sql, -1, &leggiStatement, NULL) != SQLITE_OK) 
      NSAssert1(0, @"Errore creazione compiledState '%s'", sqlite3_errmsg(database)); 

      } 


      //while(sqlite3_step(leggiStatement) == SQLITE_ROW) 
      if(SQLITE_DONE != sqlite3_step(leggiStatement)) 
      { 




       NSString *titolo = [[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(leggiStatement, 1)]; 
       NSLog(@"%@",titolo); 
       oggetto2.Titolo=titolo; 

       NSString *descrizione = [[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(leggiStatement, 2)]; 
       NSLog(@"%@",descrizione); 
       oggetto2.Descrizione = descrizione; 

       NSString *image= [[NSString alloc]initWithUTF8String:(char *)sqlite3_column_text(leggiStatement, 0)]; 
       NSLog(@"%@",image); 
       oggetto2.Immagine= image; 



     } 

     sqlite3_finalize(leggiStatement); 
    } 

sqlite3_close(database); 

} 



@end 

我的問題是我不能把它們放在webMain中... webMain中的對象保持空白。

我不使用Xib。

+0

如果你不使用xib,你爲什麼實現'initWithNibName:bundle:'方法? – rmaddy 2013-02-09 19:28:42

+0

我認爲它沒有真正實現... – who9vy 2013-02-09 21:40:00

+0

當你說網絡視圖是空的,你看到任何東西,如一個斷開的鏈接和引用「(空)」?或者它真的是空的,完全空白的,全白的,什麼都沒有顯示出來? – Rob 2013-02-09 22:18:01

回答

1

在提供的代碼片段中,您從不執行oggetto2allocinit。因此,它是nil,因此嘗試設置其屬性將無所作爲。

除了現有的NSLog聲明,我也建議做的htmlStringNSLog執行loadHTMLString權利之前,因爲它更容易看到發生了什麼事情與你的HTML通過查看源,而不是試圖從空白的網頁視圖進行推斷。


無關您的問題,但你可能不應該有代碼,可能會重用你的靜態sqlite3_stmt你已經完成了上去。您第一次致電carica_ID時,您將初始化靜態leggiStatement。但是你最終會做一個sqlite_finalize,但不要將leggiStatement設置爲nil。如果您第二次調用此方法,它不會再次sqlite3_prepare_v2,但您將釋放與之前的leggiStatement相關的資源。

幾個簡單的修復:

  • 不作leggiStatement靜態全局,而是讓它方法的地方,非靜態變量;

  • 如果你做sqlite3_finalize,確保你設置了leggiStatementnil;或

  • 不要撥打sqlite3_finalize,而只是撥打sqlite3_reset,這會重置準備好的語句,但不會釋放其資源。

+0

我將sqlite3_finalize設置爲sqlite3_reset,leggiStatement作爲非靜態變量...不幸的是沒有改變...我也在loadHTMLString之前設置了NSlog檢查...對象保持爲空 – geminimac 2013-02-11 02:12:37

+0

@geminimac您是否已將'alloc'和'init'添加到' oggetto2'? 'sqlite3_finalize'問題是次要問題(雖然很重要)。它讓我覺得'oggetto2'是主要問題。 – Rob 2013-02-11 02:19:31

+1

太棒了! ......你一直很棒......你是個天才! 我像這樣初始化對象:oggetto2 = [[Ricetta alloc] initWithPrimaryKey:0] ....工作!謝謝! – geminimac 2013-02-12 00:11:44