2011-03-10 18 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

もちろん....なぜ別のデータベースラッパー(これがあなたがやっているものなら)を書くのはどうですか? Core Dataは、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に送信します。

関連する問題