2012-03-14 4 views
0

現在Objective-Cを学習中です。私は車に関する情報を保持するクラスを作成しました(BasicCar)。また、車の色とドアの量(ExtendedCar)を保持する子クラスを作成しました。すべてのプロパティは、ドアの数を除いてテキスト(NSString)です。タイプはintです。クラス内のObjective-C intデータ型にEXC_BAD_ACCESSエラーが返される

私の親クラス:

#import <Foundation/Foundation.h> 
#import <cocoa/cocoa.h> 

@interface BasicCar : NSObject { 

NSString *make; 
NSString *model; 

} 

@property (readwrite, retain) NSString* make; 
@property (readwrite, retain) NSString* model; 


@end 

#import "BasicCar.h" 

@implementation BasicCar 

@synthesize make; 
@synthesize model; 

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     // Initialization code here. 
    } 

    return self; 
} 


@end 

私の子供クラス:

#import <Foundation/Foundation.h> 
#import <cocoa/cocoa.h> 
#import "BasicCar.h" 

@interface ExtendedCar : BasicCar { 

NSString* color; 
int doors; 

} 

@property (readwrite,retain) NSString* color; 
@property (readwrite) int doors; 

@end 


#import "ExtendedCar.h" 

@implementation ExtendedCar : BasicCar 

@synthesize color; 
@synthesize doors; 


@end 

私のメインのコード:

#import <Foundation/Foundation.h> 
#import "BasicCar.h" 
#import "ExtendedCar.h" 

int main (int argc, const char * argv[]) 
{ 


ExtendedCar *myCar1 = [[ExtendedCar alloc]init]; 
NSString *carMake = @"BMW"; 
NSString *carModel = @"M5"; 
NSString *carColor = @"blue"; 
int carDoors = 4; 

[myCar1 setMake:carMake]; 
[myCar1 setModel:carModel]; 
[myCar1 setColor:carColor]; 
[myCar1 setDoors:carDoors]; 



ExtendedCar *myCar2 = [[ExtendedCar alloc]init]; 
carMake = @"Hummer"; 
carModel = @"H3"; 
carColor = @"green"; 
carDoors = 4; 

[myCar2 setMake:carMake]; 
[myCar2 setModel:carModel]; 
[myCar2 setColor:carColor]; 
[myCar2 setDoors:carDoors]; 


NSLog(@"Make: %@, Model: %@, Color: %@, Doors: %@ \n\n",[myCar1 make],[myCar1 model],[myCar1 color], [myCar1 doors]); 

NSLog(@"Make: %@, Model: %@, Color: %@, Doors: %@ \n\n",[myCar2 make],[myCar2 model], [myCar2 color], [myCar2 doors]); 


return 0; 
} 

は今、私はそれをデバッグするとき、私はXcodeでEXC_BAD_ACCESSエラーが発生しますこの行の:

NSLog(@"Make: %@, Model: %@, Color: %@, Doors: %@ \n\n",[myCar1 make],[myCar1 model],[myCar1 color], [myCar1 doors]); 

なぜこれが起こっているのですか?これを解決するにはどうすればよいですか?私は 'ドア'部分を削除すると起こらないので、 'int'データで何かをしなければなりません。

+0

ヒントを終了します:あなたはここでそのことについての説明を見つけることができますしてください整数を出力するときに正しい書式指定子を使用する。 %@の代わりに%iを使用してください。 – Jeremy

答えて

2

Jeremyがコメントで述べたように、間違った書式指定子を使用しています。 %@はobj-cオブジェクトのフォーマット指定子です。 makemodel、およびcolorの場合は正しくなりますが、doorsの場合はCプリミティブのデータ型(int)であるため正しくありません。 intの正しい書式指定子は%i(または%d)です。

NSLog(@"Make: %@, Model: %@, Color: %@, Doors: %d \n\n",[myCar1 make],[myCar1 model],[myCar1 color], [myCar1 doors]); 

NSLog(@"Make: %@, Model: %@, Color: %@, Doors: %d \n\n",[myCar2 make],[myCar2 model], [myCar2 color], [myCar2 doors]); 
+0

あなたの助けてくれてありがとう、それは今うまく働いています:) – user1269955

0

フォーマット%@は、整数ではなくObjective Cオブジェクトを出力するためのものです。

AppleのString Format Specifier listによれば、整数を出力する正しい形式は%dです。

関連する問題