Я очень новичок в цели C, я только учусь. Я сделал учебник по techotopia «An_Example_SQLite_based_iOS_4_iPhone_Application_ (Xcode_4)», затем попытался реализовать его снова с помощью FMDB. (Я бы опубликовал ссылку на учебник, но это позволило мне опубликовать максимум 2 ссылки)
Проблема: в initWithFrame
создаю eventDB
. Затем в addEvent
после нажатия клавиши содержимое eventDB.database
изменяется. Это равно eventDB
в initWithFrame
и это в addEvent
.
#import "appTracker.h"
@implementation appTracker
- (id) initWithFrame:(NSRect)frameRect
{
self = [super initWithFrame:frameRect];
eventDB = [[appTrackerDB alloc] init];
return self;
}
- (void) keyDown: (NSEvent *) event
{
NSString *chars = [event characters];
unichar character = [chars characterAtIndex: 0];
if (character == 'A') {
NSLog (@"Adding event");
[self addEvent:@"test_arg"];
}
}
- (void) addEvent: (NSString *) name
{
[eventDB setName:name];
[eventDB setPhone:name];
[eventDB setAddress:name];
[eventDB setStatus:name];
[eventDB saveData];
}
...
@end
Используя GDB, я прошел и обнаружил, что он меняется в main.m
(автоматически сгенерированном XCode4) здесь: (не совсем уверен, что делает этот код или почему он там)
#import <Cocoa/Cocoa.h>
int main(int argc, char *argv[])
{
return NSApplicationMain(argc, (const char **)argv);
}
Я незнаком с целью C. Может ли кто-нибудь помочь мне понять, почему мой объект eventDB.database
изменяется? Я, вероятно, неправильно управляю памятью или неправильно понимаю, как вы должны это делать. Любая помощь будет оценена.
eventDB
является экземпляром:
#import <Foundation/Foundation.h>
#import "FMDatabase.h"
@interface appTrackerDB : NSObject {
NSString *name;
NSString *address;
NSString *phone;
NSString *status;
NSString *databasePath;
FMDatabase *database;
}
Спасибо!
Также [eventDB saveData]:
- (void) saveData
{
[database executeUpdate:@"insert into user (name, address, phone) values(?,?,?)",
name, address, phone,nil];
}
И создал базу данных с:
@implementation appTrackerDB
@synthesize name,address,status,phone;
- (id)init
{
self = [super init];
if (self) {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsPath = [paths objectAtIndex:0];
NSString *path = [docsPath stringByAppendingPathComponent:@"database.sqlite"];
database = [FMDatabase databaseWithPath:path];
[database open];
[database executeUpdate:@"create table IF NOT EXISTS user(ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, ADDRESS TEXT, PHONE TEXT)"];
if ([database hadError]) {
NSLog(@"DB Error %d: %@", [database lastErrorCode], [database lastErrorMessage]);
}
name = @"TEST";
}
return self;
}