【问题标题】:EXEC_BAD_ACCES on objective c class [closed]目标 c 类的 EXEC_BAD_ACCES [关闭]
【发布时间】:2013-04-30 14:43:15
【问题描述】:

我创建了一个用于管理 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];

最好的问候 ihkwiss

【问题讨论】:

  • 在 EXC_BAD_ACCESS 上查看数千个现有帖子,例如stackoverflow.com/questions/9232705/…
  • [FMDatabase databaseWithPath:] 返回自动释放的对象。阅读 Objective-c 中的内存管理。

标签: objective-c memory exc-bad-access


【解决方案1】:
    database = [FMDatabase databaseWithPath: databasePath];

这将返回一个自动释放的对象。除非您启用了 ARC(您应该启用),否则该对象将在不久的将来某个时候被释放;最有可能在当前通过运行循环结束时。

如果您由于某种原因无法打开 ARC,请retain 那个对象。

阅读Cocoa Memory Management

【讨论】:

    猜你喜欢
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    相关资源
    最近更新 更多