我试图将所有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) {
}
我该如何解决这个问题?
答案 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.
}