РЕШЕНИЕ:
Простое разделение вызова метода Tile * tile = [[Tile alloc] initWithX: x Y: y];на две отдельные строки, такие как: Tile * tile = [Tile alloc];[плитка initWithX: x Y: y];вызвал метод, чтобы прекратить получать int как указатели памяти.Я озадачен тем, почему это произошло, но это решило проблемы.Любые объяснения того, почему это произошло, приветствуются.Спасибо всем за помощь!
ОРИГИНАЛЬНАЯ ПОЧТА:
Это немного странный вопрос, так как я столкнулся с этой проблемой во время прохождения урока по адресу:http://www.iphonegametutorials.com/2010/09/23/cocos2d-game-tutorial-building-a-slide-image-game/.
Программа, которую я набрал, работает, за исключением переключения плиток, и я посмотрел в отладчике XCode, и кажется, что мои значения x и y для класса Tile устанавливаются до абсурдавысокие значения.Странно то, что когда значения передаются методу (initWithX: Y :) из исходного метода (initWithSize: imgSize :), они являются тем, чем должны быть, но когда они достигают метода, они огромны (например:в одном случае x, переданный как «1», становится «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;
}
Все должно быть так же, как в связанном уроке, но я не вижу, чтобы кто-то еще жаловался на ту же проблему.
Я также заметил, что если я зайду в отладчик и вручную изменю значения posX и posY в методе initWithX, то код переключения плиток будет работать, поэтому моя проблема определенно заключается в том, что в этом образуются действительно большие значения intметод.
Редактировать для Джима: Надеюсь, это покажет более полную картину макета, который у меня есть для объекта 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