2012-03-10 5 views
3

これは私のコードです:Objective-Cポインタの 'const char *'への暗黙的な変換は、ARCでは禁止されていますか?

//-- check for d/b; create it if it doesn't exist 
NSString *docsDir; 
NSArray *dirPaths; 

NSMutableArray *sqliteArray = [NSMutableArray array]; 
[sqliteArray addObject: @"CREATE TABLE IF NOT EXISTS SiteData (SITE_ID TEXT PRIMARY KEY NOT NULL, STA1 TEXT " 
    "TBM TEST, SITE_DESC TEXT, REMARKS TEXT, LOOP_COUNT INTEGER, DATE TEXT)" ]; 
[sqliteArray addObject: @"INSERT INTO SiteData (SITE_ID, LOOP_COUNT) VALUES('','')"]; 
[sqliteArray addObject: @"CREATE TABLE Readings (SITE_ID TEXT REFERENCES SiteData, LOOP_NBR TEXT, LOOP_CLOSED BINARY, " 
    "SEQ INTEGER, STA TEXT, BS TEXT, FS TEXT, DESC TEXT, SSBS TEXT, SSFS TEXT)" ]; 
[sqliteArray addObject: @"INSERT INTO Readings (SITE_ID, SEQ) VALUES ('','')"]; 
[sqliteArray addObject: @"CREATE TABLE EmailAddress (EMAIL_ADDRESS TEXT)"]; 
[sqliteArray addObject: @"INSERT INTO EmailAddress (EMAIL_ADDRESS) VALUES ('Enter email address here')" ]; 


// get the documents directory 
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES); 
docsDir = [dirPaths objectAtIndex: 0]; 

// build path to the d/b file 
databasePath =[[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"r64.sdb"]]; 
NSFileManager *filemgr = [NSFileManager defaultManager]; 

if([filemgr fileExistsAtPath:databasePath] == NO) { 
    const char *dbpath = [databasePath UTF8String]; 
    if(sqlite3_open(dbpath, &dbLevelingData) == SQLITE_OK) { 
     char *errMsg; 
     int i; 

     for(i = 0; i < [sqliteArray count]; i++) { 
     if(sqlite3_exec(dbLevelingData, [sqliteArray objectAtIndex:i] , NULL, NULL, &errMsg) != SQLITE_OK) 
      status.text = @"Failed to create table"; 
     } 

     sqlite3_close(dbLevelingData); 
    } 
    else 
     status.text = @"Failed to open/create database"; 
} 

声明 "(sqlite3_exe ...場合"、私は次のビルドエラーを取得していますオン:(私はいずれも表示されないのはなぜ

Implicit conversion of an Objective-C pointer to 'const char *' is disallowed with ARC 

'const' char)?どうすれば修正できますか?(注:別の例の基本形式をコピーしました。NSMutableArrayを変更する必要はありません)

答えて

5

これに基づいてpagesqlite3_exec()は次のように定義されます。

int sqlite3_exec(sqlite3*,const char *, int (*)(void*,int,char**,char**), void *, char **); 

しかし、あなたのようにそれを呼び出している:基本的に、私たちは(

sqlite3_exec(dbLevelingData, [[sqliteArray objectAtIndex:i] UTF8String], NULL, NULL, &errMsg) 

あなたのコードが正常に動作する必要があります:あなたはこれにあなたの関数呼び出しを変更した場合、だから、

int sqlite3_exec(sqlite3 *, id, int(*)(void *)(void *, int, char**, char **), void *, char **); 

NSStringconst char *に変換してください)。

+0

ありがとうございます... – SpokaneDude

関連する問題