我的项目中有多个班级。应用程序启动时,将在应用程序委托中创建数据库。我需要在另一个类中访问这个数据库,所以我在另一个类中创建了一个app delegate的对象(名为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)//错误:请求的属性表达式的地址
但这些都不起作用。
答案 0 :(得分:1)
将数据库实例变量放在app delegate中或使用“singleton pattern”。
(但我认为你可能会对“数据库”操作数的性质感到困惑。它在方法声明中声明为sqlite3 **
,应该是sqlite3 *
指针的地址。尝试通过parm被挫败了,因为Objective-C类的字段通常不是公共的,你不能获取属性的地址。对于你的情况,最简单的(虽然有点粗糙)方法是有一个从Delegate类存储它的任何地方返回sqlite3 *
变量(例如return &mySqlite3Variable
)的地址的方法。)