2011-03-08 8 views
1

Objective-C로 어려움을 겪고 있습니다 ... C#과의 차이점을 얻을 수없는 것 같습니다. 어쨌든 빌드를 제공하는 다음 코드가 있습니다. sqlite3_open 행에 오류Objective-C : 호환되지 않는 포인터 유형 오류

NSString* databasePath = @"some string"; 

if (sqlite3_open(databasePath, &db) == SQLITE_OK) { 
} 

, 나는 다음과 같은 컴파일러 오류가 발생합니다 :

Passing Argument 1 of 'sqlite_open' from incompatible pointer type

답변

0

이 경우에는 링커 오류 (@ JeremyP에서 제공하는 대답에 따라 libsqlite3.dylib를 프로젝트에 추가해야 함) 이외에도 sqlite3_open 명령은 NSString에서 작성할 수있는 상수 문자 포인터를 필요로합니다 당신은 다음과 같습니다 :

// Get the path to the database file 
    NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentPath = [searchPaths objectAtIndex:0]; 
    NSString *databasePath = [documentPath stringByAppendingPathComponent:@"ppcipher.s3db"]; 

    // Open the database file 
    const char *cDatabasePath = [databasePath cStringUsingEncoding:NSUTF8StringEncoding]; 
    sqlite3_open(cDatabasePath, &database); 

당신은 일반적으로 예상되는 것을 볼 수 있습니다. 예 :

int sqlite3_open(
    const char *filename, /* Database filename (UTF-8) */ 
    sqlite3 **ppDb   /* OUT: SQLite db handle */ 
); 
+0

사실, 내 대답의 첫 줄에는 약간의 오타가있었습니다. 그것은 libsqlite3.dylib입니다 – JeremyP

+0

@ JeremyP 머리를 주셔서 감사합니다. 그에 따라 내 대답을 업데이트했습니다. :-) –

1

SQLite는은 C 라이브러리가 아닌 오브젝티브 C 라이브러리입니다. 그것은 NSString * (첫 번째 인수)에 대해 알지 못합니다. 그것은 char * (또는 이와 비슷한 것)를 기대합니다.

사용 : 변환 할 수있는 인자로

[databasePath UTF8String] 

.

2

libsqlite3.dylib를 응용 프로그램에 연결하지 않는다고 말합니다. 당신이해야 할 것은 :

  • 는 맥 OS X 찾아
  • 바로 응용 프로그램의 대상을 선택을 클릭하고 첫 번째 탭의 창은 "연결 라이브러리"에
  • 을 "정보를 얻을"를 선택 librarly libsqlite3.dylib를 만들고 프로젝트에 추가하십시오.

오 예, 그리고 다른 사람들이 말했듯이 NSString이 아닌 함수 호출에 C 문자열을 전달해야합니다. 가장 쉬운 방법은 -UTF8String 방법을 NSString으로 사용하는 것입니다.

+0

+1 그 비트를 놓치지 않고 바로 경고로 건너 뜁니다. 나쁘다. :-) –

0

SQLite API 대신이 코드를 사용합니다. FMDB라는 래퍼를 사용하면 작업을 훨씬 쉽게 수행 할 수 있습니다. https://github.com/ccgus/fmdb

0

컴파일 단계에서 생성 된 모든 심볼이 해석되는 링커 단계입니다. 귀하의 경우에는 sqlite_open 함수를 찾을 수 없습니다. 적절한 모든 라이브러리와 프레임 워크를 포함 시켰습니까?

+0

Josh : FMDB를 사용할 수 없습니다. 왜냐하면 SQLCipher를 "사용하려고"하고 있습니다. JeremyP : .dylib에 대해 아무 것도 말하지 않는 앱에 "배선"지침이 없습니다. Lou Franco : 제안대로 변경했습니다 ... 이제이 항목이 나타납니다 (http : // imgur 참조). .com/M04rQ) – SpokaneDude

관련 문제