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
答案 0 :(得分:1)
在某处,x
和/或y
值被分配给指针。我要检查的一件事是确保你没有宣布你的int是指向int的指针。即int *x
等等。