发送到方法时,Int值变大

时间:2011-11-01 13:53:17

标签: objective-c cocos2d-iphone

SOLUTION:

简单地分离方法调用      Tile * tile = [[Tile alloc] initWithX:x Y:y]; 分为两个单独的行,如:      Tile * tile = [Tile alloc];      [tile initWithX:x Y:y]; 导致该方法停止接收整数作为内存指针。我很困惑为什么会这样,但它解决了问题。关于为什么会发生这种情况的任何解释都将受到赞赏。感谢大家的帮助!

原始帖子:

这是一个奇怪的问题,因为我在做{:3}}的教程时遇到了这个问题。

我输入的程序除了切换tile之外都有效,我查看了XCode调试器,看起来我的Tile类的x和y值被设置为荒谬的高值。奇怪的是,当值从原始方法(initWithSize:imgSize :)传递给方法(initWithX:Y :)时,它们应该是它们,但是当它们到达方法时它们是巨大的(例如:在一个实例中,当它到达方法时,作为'1'传递的x变为'1065353216'。)

我有一种感觉,它可能指向传递的int的内存位置,但我没有看到它应该在我的代码中的任何原因。见下文。

-(id)initWithSize:(CGSize)aSize imgSize:(int)aImgValue {
self = [super init];
imgValue = aImgValue;
size = aSize;
OutBorderTile = [[Tile alloc] initWithX:-1 Y:-1];
content = [NSMutableArray arrayWithCapacity:size.height];

readyToRemoveTiles = [NSMutableSet setWithCapacity:50];

for(int y = 0; y < size.height; y++) {
    NSMutableArray *rowContent = [NSMutableArray arrayWithCapacity:size.width];
    for (int x = 0; x < size.width; x++) {
        Tile *tile = [[Tile alloc] initWithX:x Y:y];
        [rowContent addObject:tile];
        [readyToRemoveTiles addObject:tile];
        [tile release];
    }
    [content addObject:rowContent];
    [content retain];
}
[readyToRemoveTiles retain];
return self;
}

-(id)initWithX:(int)posX Y:(int)posY {
self = [super init];
x = posX;
y = posY;
return self;
}

所有内容都应该与链接教程中的内容相同,但我看不到其他任何人抱怨同样的问题。

我还注意到,如果我进入调试器并手动更改块切换代码工作的initWithX方法中的posX和posY值,那么我的问题肯定在于该方法中形成的非常大的int值。

为Jim编辑:希望这能够更全面地展示我对Tile对象的布局。

@interface Tile : NSObject {
int x, y, value;
CCSprite *sprite;
}

@property(nonatomic, readonly) int x, y;
@property(nonatomic) int value;
@property(nonatomic, retain) CCSprite *sprite;

@end

@implementation Tile

@synthesize x, y, value, sprite;

// Code is logged in below. 
-(id)initWithX:(int)posX Y:(int)posY {
self = [super init];
x = posX;
y = posY;
return self;
}

@end

1 个答案:

答案 0 :(得分:1)

在某处,x和/或y值被分配给指针。我要检查的一件事是确保你没有宣布你的int是指向int的指针。即int *x等等。