-1

SQLite データベースの管理に使用する小さなクラスを作成しました。しかし今、クラスを初期化してメソッドを呼び出そうとすると、EXEC_BAD_ACCES エラーが発生します。これはメモリ管理と関係があることがわかりましたよね?多分誰かがここで私を助けてくれるか、アドバイスをくれますか? 素晴らしいことだ!

私のソースを参照してください:

ヘッダー ファイル:

#import <Foundation/Foundation.h>
#import "FMDatabase.h"

@interface DatabaseManager : NSObject
{
    FMDatabase *database;
}

-(void)selectData;

@end

実装ファイル:

#import "DatabaseManager.h"

@implementation DatabaseManager {

}

/*-------------------------------------------------------
* Class constructor
* Initializes the SQLite database connection.
-------------------------------------------------------*/
-(void)init {
    self = [super init];
    if(self) {

        // Retrieve database path
        NSString* databasePath = [[NSBundle mainBundle] pathForResource:@"database"     ofType:@"sqlite"];

        // Connect to database
        database = [FMDatabase databaseWithPath: databasePath];

        // Check database connection
        if(![database open]) {
            database = nil;
            NSLog(@"ERROR: Failed to open SQLite connection!");
        }

    }
}


-(void)selectData: (NSString *)withSqlQuery{
    return withSqlQuery;
}

@end

クラスの初期化とメソッドの呼び出し:

DatabaseManager *databaseManager = [[DatabaseManager alloc] init];
[databaseManager selectData];

宜しくお願いします

4

1 に答える 1

1
    database = [FMDatabase databaseWithPath: databasePath];

これは自動解放されたオブジェクトを返します。ARC を有効にしていない限り (有効にする必要があります)、そのオブジェクトは近い将来にリリースされます。ほとんどの場合、現在のパスの最後に実行ループを通過します。

何らかの理由で ARC をオンにできない場合は、retainそのオブジェクト.

Cocoa Memory Managementについて読んでください。

于 2013-04-30T15:03:58.550 に答える