Цель-C: мне нужна помощь в сохранении значения int. Это меняется на меня без моей команды.
Первоначальный вопрос был: «Как вы объявляете и сохраняете int?», Который был удовлетворен в другом посте здесь: Objective-C: Как вы объявляете и сохраняете int?
Теперь у меня проблема, когда int, которому было 18, меняется на 2, как-то сам по себе.
Вот мой код:
@interface Game : Layer // this is from cocos2d
{
int maxSprites;
}
@implementation Game
-(void)initVariables
{
maxSprites = 18;
}
Позже, когда я распечатал, как
NSLog(@" maxSprites = %d ", maxSprites);
Я получаю:
maxSprites = 2
И операции, которые требуют, чтобы это было 18, зависали или не работали, как будто это действительно просто 2.
Как это возможно? =)
Apple + Shift + F не показывает никакого другого использования переменной maxSprites
.
Я смотрел на другие примеры кода, и часто они выставляют переменную с помощью getter и setter, и они также используют @property
. Я что-то пропустил? Я новичок в Objective-C, так что я мог бы просто быть!
Я сделал Apple + Shift + F для maxSprites "В Project, Textual, Contains, Ignore Case и привел только к:
Game.h: int maxSprites;
Game.m: maxSprites = 18;
Game.m: NSLog(@" maxSprites = %d", maxSprites);
Game.m: NSLog(@" maxSprites = %d", maxSprites);
Game.m: NSLog(@"maxSprites is at %p", &maxSprites);
Game.m: NSLog(@"maxSprites is at %p", &maxSprites);
Game.m: NSLog(@" maxSprites = %d", maxSprites);
Game.m: NSLog(@" maxSprites = %d", maxSprites);
Game.m: NSLog(@"maxSprites is at %p", &maxSprites);
Game.m: NSLog(@"maxSprites is at %p", &maxSprites);
Я нашел место, где оно меняется, используя точку наблюдения. Меняется
Expression: “*(int *) 67379960”
New Value: 2
Old Value: 18
в этой строке:
[self checkMatchBarAward:spriteTypeToAdd];
Странно? Эта функция ничего не делает с maxSprites
, как и эта строка.
EDIT:
вот функция, я прокомментировал все внутри, и это все еще происходит:
.h
-(void)checkMatchBarAward:(int)spriteTypeToAdd;
.м
-(void)checkMatchBarAward:(int)spriteTypeToAdd
{
}
EDIT:
Спасибо за рекомендации. Я очистил все цели, и он все еще изменил значения. Из-за ответов, которые вы дали мне, ребята, вы привели меня к проблеме. Спасибо за вашу помощь.
Я опубликовал результаты ниже в ответе. Вот копия:
Ребята, вы не поверите, в чем причина. Спасибо за вашу помощь, потому что велели мне вычистить, посмотреть и проверить мои типы, это помогло.
Я просмотрел свои массивы. Я нашел тот, который был объявлен так:
int matchBarArray[8];
2 строки вверх от точки останова, где говорится, что значение изменилось с 18 на 2, у меня есть эта строка:
matchBarArray[spritesCaptured-1] = spriteTypeToAdd;
И угадайте, что я перешел границы массива на 1. Если я увеличу размер массива до 9, я больше не получу изменение int с 18 до 2.
Кроме того, если я превышаю границы более чем на 1, то есть я уменьшаю размер массива до меньшего, есть другие вещи, которые начинают меняться, такие как мой счет, логические значения, вся игра! =)
Я не могу поверить, что попадание памяти за пределы массива в Objective-C может вызвать такой бунт =) И так трудно отладить!