数组中的错误(sqlite3 *)数据库对象

时间:2014-07-11 07:05:40

标签: ios sqlite

美好的一天!

我有关于在数组中插入/存储sqlite3对象的问题。我在实现中有这个方法:

-(void)addDatabase:(sqlite3*)database databaseName:(NSString*)language inLocation:(NSString*)locationPath {
    // add database to array of databases
    if ([language length] > 0) {
        [[self.openDatabases objectForKey:@"object"] addObject:database];
        [[self.openDatabases objectForKey:@"language"] addObject:language];
        [[self.openDatabases objectForKey:@"location"] addObject:locationPath];
    }

    //TODO: add db
}

在这里:[[self.openDatabases objectForKey:@"object"] addObject:database];我总是有错误。它喜欢它不接受sqlite3对象。

这是我对该对象的声明:

ATIDatabase.h
@property sqlite3 *database;

ATIDatabase.m
@synthesize database = _database;

我坚持这个。我是IOS编程的新手。

谢谢。

1 个答案:

答案 0 :(得分:0)

只有Objective-C对象可以存储在Objective-C集合类中,sqlite3不是Objective-C对象。

我会创建一个包含所有数据库属性的自定义对象,并简单地使用这些属性的数组。这将比一系列词典更有用。

Database.h:

#import <Foundation/Foundation.h>

@interface Database : NSObject
@property (nonatomic, assign) sqlite3 *database;
@property (nonatomic) NSString *language;
@property (nonatomic) NSURL *path;

- (id)initWithDatabase:(sqlite *)database
              language:(NSString *)language
                  path:(NSURL *)path;

@end

Database.m:

#import "Database.h"

@implementation Database

- (id)initWithDatabase:(sqlite *)database
              language:(NSString *)language
                  path:(NSURL *)path
{
    self = [super init];
    if (self) {
        self.database = database;
        self.language = language;
        self.path = path;
    }
    return self;
}

@end

一旦你有了这样的对象,就可以通过向该类添加方法来开始抽象数据库操作(一旦你开始这样做,你可能会意识到你需要一个Statement对象;但是我离题)。

编辑根据OP的要求更新。

所以你发布的方法的新版本将是(注意我已经更改了参数名称并从使用NSString切换到NSURL作为路径。我也假设{{1 }}是self.openDatabases)。

NSMutableArray