0

プロジェクトに複数のクラスがあります。アプリケーションが起動すると、アプリケーション デリゲートにデータベースが作成されます。別のクラスでこのデータベースにアクセスする必要があるため、この別のクラスでアプリ デリゲートのオブジェクト (Delegate と呼ばれる) を作成しました。通常、データベースを開くには、次のようにします

if(sqlite3_open([Delegate.databasePath UTF8String], &database) == SQLITE_OK) 

ただし、この場合、変数データベースはグローバルであり、その親クラスにはありません。この場合、どうすればデータベースを開くことができますか? 私が試してみました

if(sqlite3_open([Delegate.databasePath UTF8String], &Delegate->database) == SQLITE_OK) //error: instance variable  database is protected

if (sqlite3_open([Delegate.databasePath UTF8String], &Delegate.database) == SQLITE_OK) //エラー: プロパティ式のアドレスが要求されました

しかし、これらのどれも機能しません。

4

1 に答える 1

1

データベースインスタンス変数をアプリデリゲートに配置するか、「シングルトンパターン」を使用します。

(しかし、「データベース」オペランドの性質に混乱するかもしれません。sqlite3 **メソッド宣言で宣言されており、sqlite3 *ポインタのアドレスである必要があります。Objective-のフィールドがあるため、parmを渡す試みは阻止されます。 Cクラスは通常は公開されておらず、プロパティのアドレスを取得することはできません。この場合の最も簡単な(多少大雑把ですが)方法は、sqlite3 *変数のアドレス(たとえば、return &mySqlite3Variable)を返すメソッドを使用することです。Delegateクラスがそれを格納しているところならどこでも。)

于 2012-06-01T02:25:58.897 に答える