我是新的Mac和iPhone SDK.我基本上写了一个游戏应用程序.我想使用SQLite更新和显示游戏分数.
我在网上搜索我的问题,但我没有找到任何解决方案.错误是:
Ld /Users/Iphone/Desktop/IDRGame/build/Debug-iphonesimulator/IDRGame.app/IDRGame normal i386 cd /Users/Iphone/Desktop/IDRGame setenv MACOSX_DEPLOYMENT_TARGET 10.5 setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.0 -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk -L/Users/Iphone/Desktop/IDRGame/build/Debug-iphonesimulator -L/Users/Iphone/Desktop/IDRGame -L/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk/System/Library/Frameworks/QuartzCore.framework -F/Users/Iphone/Desktop/IDRGame/build/Debug-iphonesimulator -F/Users/Iphone/Desktop/IDRGame -filelist /Users/Iphone/Desktop/IDRGame/build/IDRGame.build/Debug-iphonesimulator/IDRGame.build/Objects-normal/i386/IDRGame.LinkFileList -mmacosx-version-min=10.5 -framework Foundation -framework UIKit -framework CoreGraphics -framework AudioToolbox -lsqlite3.0 -o /Users/Iphone/Desktop/IDRGame/build/Debug-iphonesimulator/IDRGame.app/IDRGame Undefined symbols: ".objc_class_name_ScoreDB", referenced from: literal-pointer@__OBJC@__cls_refs@ScoreDB in IDRGameAppDelegate.o literal-pointer@__OBJC@__cls_refs@ScoreDB in InterclockView.o ld: symbol(s) not found collect2: ld returned 1 exit status
我有SQLite的ScoreDB.h和ScoreDB.m文件.ScoreDB.h文件
// // ScoreDB.h // SQLiteTutorial // // Created by Iphone App on 6/11/09. // Copyright 2009 __MyCompanyName__. All rights reserved. // #import#import @interface ScoreDB : NSObject { NSInteger *game_id; NSString *name; NSString *score; BOOL hydrated; BOOL dirty; } @property (nonatomic, readonly) NSInteger *game_id; @property (nonatomic, copy) NSString *name; @property (nonatomic, copy) NSString *score; @property (nonatomic, readwrite) BOOL dirty; @property (nonatomic, readwrite) BOOL hydrated; - (id)initWithPrimaryKeyNSInteger)pk; -(void)UpdateDatabase; -(void)SelectDatabase; + (void) finalizeStatements; @end
和ScoreDB.m
#import "ScoreDB.h" static sqlite3 *database = nil; static sqlite3_stmt *insert_statement = nil; static sqlite3_stmt *init_statement = nil; static sqlite3_stmt *delete_statement = nil; static sqlite3_stmt *hydrate_statement = nil; static sqlite3_stmt *dehydrate_statement = nil; static sqlite3_stmt *update_statement = nil; @implementation ScoreDB @synthesize game_id,name,score,dirty,hydrated; - (id)initWithPrimaryKeyNSInteger)pk{ [super init]; game_id = pk; return self; } // Finalize (delete) all of the SQLite compiled queries. + (void)finalizeStatements { if (database) sqlite3_close(database); if (insert_statement) { sqlite3_finalize(insert_statement); insert_statement = nil; } if (init_statement) { sqlite3_finalize(init_statement); init_statement = nil; } if (delete_statement) { sqlite3_finalize(delete_statement); delete_statement = nil; } if (hydrate_statement) { sqlite3_finalize(hydrate_statement); hydrate_statement = nil; } if (dehydrate_statement) { sqlite3_finalize(dehydrate_statement); dehydrate_statement = nil; } if (update_statement) { sqlite3_finalize(update_statement); update_statement = nil; } } -(void)UpdateDatabase { delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]; [alert show]; if(update_statement == nil) { const char *sql = "UPDATE game Set score = ? Where name = ?"; if(sqlite3_prepare_v2(database, sql, -1, &updateStmt, NULL) != SQLITE_OK) NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(database)); } sqlite3_bind_text(update_statement, 1, [name UTF8String], -1, SQLITE_TRANSIENT); sqlite3_bind_text(update_statement, 2, [score UTF8String], -1, SQLITE_TRANSIENT); // sqlite3_bind_int(update_statement, 3, coffeeID); if(SQLITE_DONE != sqlite3_step(update_statement)) NSAssert1(0, @"Error while updating. '%s'", sqlite3_errmsg(database)); sqlite3_reset(update_statement); //Reclaim all memory here. [score release]; score = nil; [name release]; name = nil; } -(void)SelectDatabase {} - (void) setGameNameNSString *)newValue { [name release]; name = [newValue copy]; } - (void) setGameScoreNSString *)newValue { [score release]; score = [newNumber copy]; } - (void)dealloc { [name release]; [score release]; [super dealloc]; } @end
我正在使用那些代码
IDRGameAppDelegate *appDelegate = (IDRGameAppDelegate *)[[UIApplication sharedApplication] delegate]; ScoreDB *dbObj = [[ScoreDB alloc] initWithPrimaryKey:0]; dbObj.name = @"reflex"; dbObj.score = @"0.345"; [appDelegate updateScore:dbObj];
当我关闭这一行时:ScoreDB *dbObj = [[ScoreDB alloc] initWithPrimaryKey:0];
错误消失了.什么是我不明白的问题.请帮我.我的框架:
libsqlite3.0.dylib
AudioToolbox.framework
UIkit.framework
Foundation.framework
CoreGraphics.framework.
我希望你能帮助我.
感谢大家.
您可能尚未将ScoreDB.m添加到当前目标.右键单击ScoreDB.m,选择"获取信息",选择"目标"选项卡并确保它是您正在构建的目标的一部分.