I'm thinking I'm missing setters/getters, but that's what I'm really having trouble with!
I'd like to be able to set id_num, but can't see how to call a method to do that. I've tried:
int example = 2;
[MagnoliaData database setId_num:example];
and variations of:
[[[MagnoliaData] database] setId_num:example];
Magnoliadata.h
#import <Foundation/Foundation.h>
#import <sqlite3.h>
@interface MagnoliaData : NSObject {
sqlite3 *_database;
}
+ (MagnoliaData*)database;
- (NSArray *)MagnoliaInfos;
- (NSString *) getWritableDBPath;
- (NSString *)createEditableCopyOfDatabaseIfNeeded;
- (NSArray *)ShowItemNumber;
@end
Magnoliadata.m
#import "MagnoliaInfo.h"
#import "MagnoliaData.h"
#define DATABASE_NAME @"Magnolia.db"
#define DATABASE_TYPE @"sqlite3"
@implementation MagnoliaData
static MagnoliaData *_database;
int id_num = 2;
+(MagnoliaData*)database {
if (_database == nil) {
_database = [[MagnoliaData alloc] init];
}
return _database;
}
- (id)init {
if ((self = [super init])) {
NSString *sqLiteDb = [self createEditableCopyOfDatabaseIfNeeded ];
if (sqlite3_open([sqLiteDb UTF8String], &_database) != SQLITE_OK) {
NSLog(@"Failed to open database!");
}
}
return self;
}
- (void)dealloc {
sqlite3_close(_database);
[super dealloc];
}
- (NSArray *)ShowItemNumber {
NSString *sqlStatement = @"SELECT id, item_type, description, date_issued, completed_expired FROM magnolia_one WHERE id=?";
NSLog(@"%@",sqlStatement);
// NSLog(@"%@",id_num);
sqlite3_stmt *statement;
NSMutableArray *retval = [[[NSMutableArray alloc] init] autorelease];
int errr;
//*
if ((errr = sqlite3_prepare_v2(_database, [sqlStatement UTF8String], -1, &statement, nil)) == SQLITE_OK) {
sqlite3_bind_int( statement, 1, id_num);
NSLog(@"success!");
while ((errr = sqlite3_step(statement)) == SQLITE_ROW) {
char *item_type = (char *) sqlite3_column_text(statement, 1);
char *desc = (char *) sqlite3_column_text(statement, 2);
char *date_issued = (char *) sqlite3_column_text(statement, 3);
char *comp = (char *) sqlite3_column_text(statement, 4);
if (item_type != nil) {
NSString *description = [[NSString alloc] initWithUTF8String:desc];
NSString *mytype = [[NSString alloc] initWithUTF8String:item_type];
NSString *issued_date = [[NSString alloc] initWithUTF8String:date_issued];
NSString *completed_expired = [[NSString alloc] initWithUTF8String:comp];
NSLog(@"Desc: %@",description);
NSLog(@"Type: %@",mytype);
NSLog(@"Issued: %@",issued_date);
NSLog(@"Comp: %@",completed_expired);
MagnoliaInfo *info = [[MagnoliaInfo alloc]initWithUniqueId:(int)id_num mytype:(NSString *)mytype description:(NSString *)description date_issued:(NSString *)date_issued completed_expired:(NSString *)completed_expired];
[retval addObject:info];
[description release];
[mytype release];
[issued_date release];
[completed_expired release];
[info release];
} else {
NSLog(@"Did not read data.");
}
}
NSLog(@"End of while loop");
}
return retval;
//*/
}
- (NSString *) getWritableDBPath {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
return [documentsDir stringByAppendingPathComponent:DATABASE_NAME];
}
-(NSString *)createEditableCopyOfDatabaseIfNeeded
{
// Testing for existence
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:DATABASE_NAME];
success = [fileManager fileExistsAtPath:writableDBPath];
if (success)
return writableDBPath;
NSLog(@"copying file...");
// The writable database does not exist, so copy the default to
// the appropriate location.
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath]
stringByAppendingPathComponent:DATABASE_NAME];
success = [fileManager copyItemAtPath:defaultDBPath
toPath:writableDBPath
error:&error];
if(!success)
{
NSAssert1(0,@"Failed to create writable database file with Message : '%@'.",
[error localizedDescription]);
}
return writableDBPath;
}
@end
I'm using XCode 4.02

New Topic/Question
Reply



MultiQuote



|