美好的一天!
我有关于在数组中插入/存储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编程的新手。
谢谢。
答案 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