2009-06-17 25 views
1

私は新しいMacとiphone SDKです。 私は基本的にゲームアプリケーションを書く。私はSQLiteを使ってゲームのスコアを更新して表示したいと思っています。"collect2:ldが1の終了ステータスを返しました"エラーIphone SDK。助けてください

私はウェブで自分の問題を検索しましたが、私には解決策が見つかりませんでした。 エラーは次のとおりです。

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: 
[email protected][email protected][email protected] in IDRGameAppDelegate.o 
[email protected][email protected][email protected] 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 <UIKit/UIKit.h> 
#import <sqlite3.h> 

@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。

私はあなたを助けてくれることを願っています。

ありがとうございました。

+1

現在のターゲットにscoredb.mが設定されていることを確認してください。 –

答えて

8

現在のターゲットにScoreDB.mを追加していない可能性があります。 ScoreDB.mを右クリックし、[情報を見る]を選択し、[ターゲット]タブを選択して、作成しているターゲットの一部であることを確認します。

関連する問題