如何在另一个文件中执行方法?

时间:2011-03-09 17:35:15

标签: objective-c xcode

我试图将所有SQLite代码分别放在一个单独的.m文件中(称为SQLiteDB.m,以及.h文件)。我正在调用另一个文件中的一个方法:ReaderAppDelegate.m“。代码是:

//  create the d/b if it doesn't exist
[self checkForDatabase];

在ReaderAppDelegate.h中,我有:

#import <UIKit/UIKit.h>
#import <sqlite3.h>

@class ReaderViewController;

@interface ReaderAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    ReaderViewController *viewController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet ReaderViewController *viewController;

- (void)checkForDatabase;
//- (void)SQLiteConnection: (NSString *)defaultDBPath;
@end

显然,它无法找到它,因为它位于SQLiteDB.m。

#import "SQLiteDB.h"

@implementation SQLiteDB

@synthesize db, dbPath, databaseKey;


//--------------    check for database or create it    ----------------|

+ (void)checkForDatabase  {

    // 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)  {


    }

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您需要在ReaderAppDelegate.m文件中导入SQLiteDB.h。并确保

+ (void)checkForDatabase;

在头文件SQLiteDB.h中声明。

完整示例:

ReaderAppDelegate.h

@class SQLiteDB;

@interface ReaderAppDelegate : NSObject <UIApplicationDelegate> {
     ...
     SQLiteDB *myDB;
}

ReaderAppDelegate.m

#import "SQLiteDB.h"

@implementation
- (void)applicationDidFinishLaunching:(UIApplication *)application {
      myDB  = [SQLiteDB checkForDatabase];
 }

SQLiteDB.h

@interface SQLiteDB : NSObject {
      ...
}

+ (void)checkForDatabase;

答案 1 :(得分:0)

不要有标题 - SQLiteDB.h。如果是,请加入。有一个指向ReadAppDelegate中接口的指针,它被初始化并调用方法,如 -

[ instance SQLiteConnection:defaultPath ] ;

如果它是另一个接口的一部分,则不能将其声明为当前接口的成员并访问另一个接口。而是将消息传递给实例。

#import "SQLiteDB.h"
@interface ReaderAppDelegate : NSObject <UIApplicationDelegate> {

    // ....
    SQLiteDB *instance; // You need to dealloc it because it manages resources.
}