2014-06-06 62 views
0

我需要將常量字符類型數據轉換爲NSString對象類型,因爲sqlite數據庫返回char *類型數據。爲此,我使用了NSString類的方法stringWithUTF8strin,但它返回NULL. 它提取sqlite文本類型的數據。iOS:無法將常量字符轉換爲NSString對象

這裏是我的代碼:

-(void)getAllData:(const char *)sqlQuery 
{ 
name=[[NSMutableArray alloc]init]; 

department=[[NSMutableArray alloc]init]; 
image=[[NSMutableArray alloc]init]; 
testimonial=[[NSMutableArray alloc]init]; 
@try 
{ 

NSArray *pathArray=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *final_phone_path=[[pathArray objectAtIndex:0]stringByAppendingPathComponent:@"amarinf5_excel.sqlite"]; 
NSLog(@"%@",final_phone_path); 

NSFileManager *myFileManager=[NSFileManager defaultManager]; 

if(![myFileManager fileExistsAtPath:final_phone_path]) 
{ 
    NSLog(@"file doesnot exist"); 
} 
if(sqlite3_open([final_phone_path UTF8String], &dataBAse)!=SQLITE_OK) 
{ 
    NSLog(@"could not be able to open the file"); 
} 
const char *sql=sqlQuery; 
sqlite3_stmt *statement; 
if(sqlite3_prepare_v2(dataBAse, sql, -1, &statement, nil)!=SQLITE_OK) 
{ 
    NSLog(@"Error message fail to prepare statement %s",sqlite3_errmsg(dataBAse)); 
} 


while(sqlite3_step(statement)==SQLITE_ROW) 
{ 
    const char *name1=(char *)sqlite3_column_text(statement, 0); 
    const char *deprtment1=(char *)sqlite3_column_text(statement, 1); 
    const char *image1= (char *)sqlite3_column_text(statement, 2); 
    **const char *testimonial1=(char *)sqlite3_column_text(statement, 3); 
    NSLog(@"%@",[NSString stringWithUTF8String:testimonial1]);** 
    NSLog(@"%s",testimonial1); 
    NSLog(@"%@",[NSString stringWithUTF8String:image1]); 
    [name addObject:[NSString stringWithUTF8String:name1]]; 
    [department addObject:[NSString stringWithUTF8String:deprtment1]]; 
    [image addObject:[NSString stringWithUTF8String:image1]]; 

    //[testimonial addObject:[NSString stringWithUTF8String:testimonial1]]; 
    NSLog(@"%@",[NSString stringWithUTF8String:testimonial1]); 
} 
if (sqlite3_finalize(statement) != SQLITE_OK) 
{ 
    NSLog(@"Failed to finalize data statement, normally error handling here."); 
} 
if (sqlite3_close(dataBAse) != SQLITE_OK) 
{ 
    NSLog(@"Failed to close database, normally error handling here."); 
} 
} 
@catch (NSException *exception) { 
NSLog(@"An exception occurred: %@", [exception reason]); 

} 
@finally { 

} 

} 
+0

http://stackoverflow.com/questions/10284011/convert-const-char-to-nsstring-and-convert-back-nsautoreleasenopool和HTTP我的代碼:// stackoverflow.com/questions/4366799/nsstring-and-const-char-conversion – iPatel

+0

這種情況僅適用於見證1 – pratik371987

+0

謝謝。
Maulik M. Kamani
ASP.net開發人員
Tech Sture Technology Pvt。 Ltd

我在testimonial1中獲得的數據,但無法隱藏,是否有可能包含html標籤 – pratik371987

回答

0

當我綁的NSString不同的方法這裏使用stringWithFormat方法找到的解決方案是低於

while(sqlite3_step(statement1)==SQLITE_ROW) 
{ 
    const char *name1=(char *)sqlite3_column_text(statement1, 0); 
    const char *deprtment1=(char *)sqlite3_column_text(statement1, 1); 
    const char *image1= (char *)sqlite3_column_text(statement1, 2); 
    const char *testimonial1=(char *)sqlite3_column_text(statement1, 3); 


    [name addObject:[NSString stringWithUTF8String:name1]]; 
    [department addObject:[NSString stringWithUTF8String:deprtment1]]; 
    [image addObject:[NSString stringWithUTF8String:image1]]; 
    [testimonial addObject:[NSString stringWithFormat:@"%s",testimonial1]]; 

} 
0

我做以下和一切正常:

if (sqlite3_prepare_v2(database, [querySQL UTF8String], -1, &statement, nil) == SQLITE_OK) { 
        while (sqlite3_step(statement) == SQLITE_ROW) { 
         int idMessage = sqlite3_column_int(statement, 0); 
         char *nameChars = (char *) sqlite3_column_text(statement, 1); 
         char *methodChars = (char *) sqlite3_column_text(statement, 2); 
         char *bodyChars = (char *) sqlite3_column_text(statement, 3); 
         char *pathChars = (char *) sqlite3_column_text(statement, 4); 
         char *headerChars = (char *) sqlite3_column_text(statement, 5); 
         char *typebodyChars = (char *) sqlite3_column_text(statement, 6); 
         char *typebodyoutChars = (char *) sqlite3_column_text(statement, 7); 
         NSString *name = [[NSString alloc] initWithUTF8String:nameChars]; 
         NSString *method = [[NSString alloc] initWithUTF8String:methodChars]; 
         NSString *body = [[NSString alloc] initWithUTF8String:bodyChars]; 
         NSString *path = [[NSString alloc] initWithUTF8String:pathChars]; 
         NSString *header = [[NSString alloc] initWithUTF8String:headerChars]; 
         NSString *typebody = [[NSString alloc] initWithUTF8String:typebodyChars]; 
         NSString *typebodyout = [[NSString alloc] initWithUTF8String:typebodyoutChars]; 
        } 
        sqlite3_finalize(statement); 
       } 
0

有一個3種方式一個const char *轉換爲NSString的目標C

+ (instancetype)stringWithUTF8String:(const char *)nullTerminatedCString; //for UTF8 string only 
- (instancetype)initWithCString:(const char *)nullTerminatedCString encoding:(NSStringEncoding)encoding; 
+ (instancetype)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc; 

驗證你的const char *,如果它最後不包含空char('\ 0'),將這個char添加到字符串中導致這些函數需要nullterminated cs字符串。當你定義一個CS,空字符會自動在和字符串

const char *str = "some string"; 

的插入,但如果你用字符數組操作,你必須做你自己