Я хотел бы создать модели на базе базы данных, поэтому я хочу использовать свой собственный класс DatabaseModel для управления соединением с базой данных, и каждый класс, который использует базу данных, выводится из него (это будет отображение между модель и таблица). Я использую sqlite API.Objective-c static instance
Поскольку мне нужен только экземпляр соединения одна базы данных, я создал статическую переменный для хранения экземпляра СОЕДИНЕНИЯ
DatabaseModel.h --------------- @interface DatabaseModel : NSObject { } // the connection instance static FMDatabase *database; +(BOOL) open; +(void) close; +(id)getDatabase; @end DatabaseModel.m --------------- // Is it necassary? static FMDatabase *database = nil; @implementation DatabaseModel +(BOOL) open { // make connection (doodled code) database = [DBAPI open]; } +(void) close { // ... } +(id)getDatabase { // Throws bad_memory_access [database retain]; return database; } @end MyClass.h --------- @interface MyClass : DatabaseModel { } -(void) foobar; @end MyClass.m --------- @implementation MyClass -(void) foobar { // This assign doesn't work database = [DatabaseModel getDatabase]; } @end
В этом случае [базы данных сохраняют] бросает bad_access исключения. Я точно не понимаю, когда база данных является статической переменной, почему я получаю это сообщение ...
1. В открытом методе выделяется API Я не хочу использовать singleton, потому что это не типичный одноэлементный случай.Будет больше производных классов, и я просто хочу использовать одно и то же соединение с базой данных во всех классах. (Thread safe - моя проблема ..) Поэтому я открываю соединение в начале приложения и закрываю, когда программа завершается. Спасибо за ссылки ... – 2009-06-07 12:59:54