在iphone中全局定义sqlite3数据库

时间:2011-06-09 22:20:36

标签: iphone objective-c sqlite

有没有办法可以全局定义sqlite3数据库。我搜索了很多地方,但大多数都处理单例或外部方法来定义全局变量。我试过了两次但是徒劳无功。 我实际上尝试在许多文件上使用sqlite3 *数据库来创建,插入或选择。我真的需要知道在哪里以及如何创建全局变量。 我在appDelegate中定义我的sqlite3数据库并检查数据库的打开或关闭连接。如何从appdelegate调用sqlite3 *数据库到其他viewcontrollers或nsobjects?

   /// AppDelegate.h
   @interface AppDelegate : NSObject <UIApplicationDelegate> {
       sqlite3 *database;
       AppDelegate *delegate;
   }

    /// AppDelegate.m

      -(void)checkAndCreateDatabase_2{

        NSString *databaseName = @"main.sqlite";
        NSArray *documentPaths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDir = [documentPaths objectAtIndex:0];
        databasePath = [documentsDir stringByAppendingPathComponent:databaseName];

       }

3 个答案:

答案 0 :(得分:3)

@interface AppDelegate : NSObject <UIApplicationDelegate> {
   sqlite3 *database;
   //AppDelegate *delegate; // No need to declare this so remove this.
}
@property (nonatomic,retain) sqlite3 *database;

@synthesize database; //Add in AppDelegate.m

//In AnyViewController.m access AppDelegate as follow.
 -(void)viewDidLoad
 {
      AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
      sqlite3 *database = [appDelegate database]; //Do whatever you want to do with DB
 }

希望它有所帮助。

答案 1 :(得分:1)

将属性添加到AppDelegate.h

@property (nonatomic,readonly) sqlite3 *database;

在AppDelegate.m中合成

@synthesize database;

并通过以下代码在viewcontollers / nsobjects中使用它:

sqlite3 *database = [(AppDelegate*)[UIApplication sharedApplication].delegate database];

答案 2 :(得分:1)

您最好为sqlite数据库创建及其函数实现一个单独的类,创建一个类级别方法,实例化该类的对象,并在其他控制器中使用此对象来访问或修改数据库。