私は検索しましたが、これに対するアサートを見つけることができません。私はそれが私がここで欠けている基本的なものでなければならないことを知っている。Objective Cの列挙型が再割り当て時に変更されるオブジェクト
typedef enum {
NINETYBEND, NINETYBEND_FAST, NINETYBEND_SLOW, STRAIGHT
} BlockTypeEnum;
私は、このように作成していたオブジェクトでこれらの値を使用しようとしています:私は二度同じ変数を使用しようとすると
BlockTypeEnum blockType = STRAIGHT;
XMLLevelPiece* piece = [[XMLLevelPiece alloc] init];
[piece initPiece:blockType];
私の問題が発生した
私は、列挙型を持っています。列挙型で1つのオブジェクトを作成し、列挙型を変更してから2番目のオブジェクトを作成すると、最初のオブジェクトの列挙型が2番目の列挙型の値に変更されます。これは私が望むものではありません。以下の例:私の知る限り理解されるように
BlockTypeEnum blockType = STRAIGHT;
XMLLevelPiece* piece = [[XMLLevelPiece alloc] init];
[piece initPiece:blockType];
blockType = NINETYBEND_FAST;
XMLLevelPiece* piece2 = [[XMLLevelPiece alloc] init];
[piece2 initPiece:blockType];
NSLog([NSString stringWithFormat:@"%d", [piece getBlockType]]);
NSLog([NSString stringWithFormat:@"%d", [piece2 getBlockType]]);
//BOTH BLOCK TYPES ARE NOW NINETYBEND_FAST, NOT WHAT I WANTED!!
、列挙型は、単に見せかけint型ではなく、ポインタである、と私は、最初のオブジェクトに追加した後、変数を再割り当てしています。誰かが私に行方不明を教えてください!ありがとう、サイモン。
ここはXMLPieceのコードです。ありがとうございます!
#import "XMLLevelPiece.h"
#import "BlockType.h"
#import "GridCord.h"
#import "BlockColor.h"
@implementation XMLLevelPiece
BlockTypeEnum mBlockType;
BlockColorEnum mBlockColor;
int mRotation;
GridCord* mGridCords;
BlockColorEnum mLeftColor;
BlockColorEnum mTopColor;
BlockColorEnum mRightColor;
Boolean mRotatable;
Boolean mMoveable;
int mGroupID;
-(id) init
{
if((self=[super init])) {
}
return self;
}
-(void)initPiece:(BlockTypeEnum)pBlockType pBlockColor:(BlockColorEnum)pBlockColor pRotation:(int)pRotation pGridCords:(GridCord*)pGridCords pLeftColor:(BlockColorEnum) pLeftColor pTopColor:(BlockColorEnum) pTopColor pRightColor:(BlockColorEnum) pRightColor pRotatable:(Boolean) pRotatable pMoveable:(Boolean) pMoveable pGroupID:(int) pGroupID
{
mBlockType = pBlockType;
mBlockColor = pBlockColor;
mRotation = pRotation;
mGridCords = pGridCords;
mLeftColor = pLeftColor;
mTopColor = pTopColor;
mRightColor = pRightColor;
mRotatable = pRotatable;
mMoveable = pMoveable;
mGroupID = pGroupID;
}
-(void)initPiece2
{
NSLog(@"poo");
}
-(Boolean)getRotatable
{
return mRotatable;
}
-(Boolean)getMoveable
{
return mMoveable;
}
-(int) getGroupID
{
return mGroupID;
}
-(BlockColorEnum) getLeftColor
{
return mLeftColor;
}
-(BlockColorEnum) getTopColor
{
return mTopColor;
}
-(BlockColorEnum) getRightColor
{
return mRightColor;
}
-(BlockTypeEnum) getBlockType
{
return mBlockType;
}
-(BlockColorEnum) getBlockColor
{
return mBlockColor;
}
-(int) getRotation
{
return mRotation;
}
-(id) getGridCords
{
return mGridCords;
}
-(void) setRotatable:(Boolean) pRotatable
{
mRotatable = pRotatable;
}
-(void) setMoveable:(Boolean) pMoveable
{
mMoveable = pMoveable;
}
@end
何メソッド 'getBlockType'は見えますか? –
XMLLevelPieceのコードを実際に見る必要があります。質問を編集してください。 – zaph
私は 'init'を呼び出すのはかなり確信していますし、' initPiece'はあなたが望むものではありません。ほとんどの場合、 ' - (id)initWithPiece:(BlockTypeEnum)blockType;'が '[super init]'を呼び出すでしょう。 –