2011-03-10 4 views
0

"왜"SQLiteDB가 "-checkIfDatabaseExists"에 응답하지 않을 수 있는지 이해하지 못합니다. 이 문제의 원인은 무엇이며 어떻게 수정합니까? (나는 이것이 작동하도록하는 것에 매우 가깝지만, 나는 초보자이기 때문에 여전히 문제가있다.)이 문제의 원인은 무엇입니까?

감사의 말 :

#import "SQLiteDB.h" 

static SQLiteDB *sharedSQLiteDB = nil; // makes this a singleton class 

@implementation SQLiteDB 

@synthesize db, dbPath, databaseKey; 


//-------------- check for database or create it ----------------| 
#pragma mark Singleton Methods 

+ (SQLiteDB *) sharedSQLiteDB { 

    if(!sharedSQLiteDB) { 
     sharedSQLiteDB = [[SQLiteDB alloc] init]; 
     [sharedSQLiteDB checkIfDatabaseExists]; 
    } 
    return sharedSQLiteDB; 
} 

+(id)allocWithZone:(NSZone *)zone { 
    if(!sharedSQLiteDB) { 
     sharedSQLiteDB = [super allocWithZone:zone]; 
     return sharedSQLiteDB; 
    } 
    else { 
     return nil; 
    } 
} 

-(id)copyWithZone:(NSZone *)zone { 
    return self; 
} 

-(void) release { 
    // no-op 
} 


- (void) checkIfDatabaseExists { 
    // 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]; 
    if(sqlite3_open(cDatabasePath, &db) == SQLITE_OK) // does it exist? 
     return; 
    else { // create database file here 

    } 

} 
@end 

Here is the results of the build:

+2

스크린 샷뿐만 아니라 텍스트로 코드를 붙여 넣으십시오. – mkb

+0

물론 .... 왜 다른 데이터베이스 래퍼를 작성하는 것이 귀찮을까요? 핵심 데이터는 iOS/Mac OS X에서 데이터베이스를 만드는 가장 뛰어난 성능을 자랑합니다 (임의의 스키마가없는 SQLite 데이터베이스를 랩핑해야하는 경우 FMDB가 가장 좋은 방법입니다). – bbum

답변

0

난 당신이 여기에 구현 한 것을 100 % 확신 아니지만, 내가 말할 수있는 것과, 헤더는 클래스 메서드와 checkIfDatabaseExists 정의 +있다 (다음은 코드입니다 아직 구현하지 않았기 때문에 "불완전한 구현"및 "메소드 정의를 찾을 수 없음"경고가 표시됩니다. 그러나 sharedSQLiteDB 메소드에서는 정의하지 않은 인스턴스 메소드를 참조하는 SQLiteDB 인스턴스에서 -checkIfDatabaseExists를 호출합니다.

편집 : 좋아, 전체 코드를 본 후, 위의 대답은 분명히 사실이 아닙니다. 하지만 머리글은 어떻게 생겼지? checkIfDatabaseExists 서명 앞에 -가 있습니까?

0

당신이있을 때 : 따라서, -foo를 컴파일 할 때 self-bar에 응답하지 않을 수 있음을 경고합니다, -foo를 컴파일 할 때

- (void) foo 
{ 
    [self bar]; 
} 

- (void) bar 
{ ... } 

컴파일러는 -bar의 정의를 보지 않았습니다. 방법을 추가, 다른 클래스에 의해 불려갑니다 경우

@interface Foo() 
- (void) bar; 
@end 

:

그 방법은 클래스에 전적으로 개인하기위한 것입니다 경우,하는 .m 파일의 상단에 이렇게 선언을 @interface으로 보내주십시오.

관련 문제