我對客觀C非常陌生,我只是在學習。我做了techotopia教程「An_Example_SQLite_based_iOS_4_iPhone_Application_(Xcode_4)」,然後試着用FMDB再次實現它。 (我會發布鏈接到教程,但它讓我只發佈2鏈接最大)這個實例對象爲什麼被改變?
問題:在initWithFrame
我創建eventDB
。然後在addEvent
,按下鍵後,eventDB.database
的內容被改變。 This是eventDB
在initWithFrame
和this是否在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;
}
你不想讓它改變嗎?我的意思是你在調用addEvent時設置名稱和地址屬性,這會改變對象。 或者你是在談論替換對象? (例如,指針值改變) 也許你應該詳細說明你的問題實際上是什麼。 – robustus 2012-03-13 20:44:37
我不希望'eventDB.database'的內容改變。我不會改變這些。 – user1267383 2012-03-13 20:51:48
aehm ...那麼[eventDB saveData]是什麼;如果它沒有把數據保存到數據庫中呢? – robustus 2012-03-13 20:55:46