удаление целых чисел из массива

Мне нужно создать массив для координат моих спрайтов, и я хотел удалить координату, как только спрайт получит эту координату из массива, поскольку я не хочу, чтобы другой спрайт имел ту же координату, я могу Кажется, он не работает, ошибок нет, и при отладке он говорит nsexception и завершает работу. Что я делаю неправильно и где я могу освободить массивы? когда я выпускаю их в Dealloc, он говорит, что мне нужно объявить их.

CGPoint cg1 = CGPointMake(33,33);
NSValue *cg1obj = [NSValue valueWithCGPoint:cg1];

CGPoint cg2 = CGPointMake(33,97);
NSValue *cg2obj = [NSValue valueWithCGPoint:cg2];

NSMutableArray *numberxy = [[NSMutableArray alloc] init]; int pointcount = 0;
[numberxy insertObject:cg1obj atIndex:pointcount++];
[numberxy insertObject:cg2obj atIndex:pointcount++];

NSMutableArray  *sprites = [[NSMutableArray alloc] init]; int spritecount = 0;
[sprites insertObject:red1 atIndex:spritecount++];
[sprites insertObject:red2 atIndex:spritecount++];

for (int i=0; i<3;i++) {
    int rpoint = arc4random() % 3;
    int rsprite = arc4random() % 3;

    CGPoint point = [[numberxy objectAtIndex:rpoint] CGPointValue];

    CCSprite *sprite1 = [sprites objectAtIndex:rsprite];

    sprite1.position = ccp(point.x,point.y);

    if (sprite1.position.x == point.x && sprite1.position.y == point.y) {
        [numberxy removeObjectAtIndex:rpoint];
        [sprites removeObjectAtIndex:rsprite];
    }
}

person Dangermouse    schedule 27.01.2011    source источник


Ответы (1)


Ваш код странный. Почему xValue определяется после его использования? У вас может быть утечка, если xValue было определено ранее таким же образом, а теперь вы переопределяете xValue. Затем вы проверяете, находится ли X в новом xValue. В новом xValue ничего нет, поэтому оператор if будет оценен как ложный, поэтому ничего не будет удалено.

NSNumber *X = [NSNumber numberWithInt:randomNumberx];
[xValue containsObject: numberx];

xValue = [[NSMutableArray alloc]init];
if ([xValue containsObject:X]) {
    [numberx removeObject:X];
}

Кроме того, в чем смысл [xValue containsObject: numberx]; вне оператора if? У него нет цели.

person David    schedule 27.01.2011
comment
Не странно - ерунда. Код Dangermouse не имеет никакого смысла и указывает на непонимание указателей — ссылок на объекты. Мое предложение состояло бы в том, чтобы прочитать руководство по Objective-C, а затем поиграть на компьютере с этим кодом; объяснить, что делает каждая строка кода. - person bbum; 27.01.2011
comment
@David, извините за то, что в итоге я скопировал код из двух разных программ в одну, так как в то время у меня было открыто два проекта, я отредактирую код - person Dangermouse; 05.02.2011
comment
@David, он продолжает выдавать мне nsexception в консоли отладчика и вылетает, должен ли я опубликовать весь код? - person Dangermouse; 06.02.2011
comment
@Dangermouse. Нет, не постите все здесь. Удаление целых чисел из массива тривиально. Вероятно, у вас проблемы с чем-то другим. Вам нужно разбить код на части и отладить его. - person David; 06.02.2011
comment
@Дэйвид. во время отладки я обнаружил, что получаю эту ошибку «NSInvalidArgumentException», причина: «*** -[NSMutableArray insertObject:atIndex:]: попытка вставить нулевой объект в 0» действительно не знаю, что это значит? - person Dangermouse; 06.02.2011
comment
@Dangermouse, это означает, что объект, который вы вставляете в массив, не был создан/выделен. - person David; 06.02.2011
comment
@David, мои очки были созданы, я думаю, проблема в спрайтах, хотя я объявил их в заголовочном файле, мне нужно преобразовать их в объекты или что-то в этом роде? - person Dangermouse; 06.02.2011
comment
@Dangermouse, да, вы должны убедиться, что все, что вы помещаете в массив, является объектом. В вашем случае cg1obj, cg2obj, red1 и red2 должны быть объектами. - person David; 06.02.2011
comment
@ Дэвид, как ты превращаешь спрайты в объект? - person Dangermouse; 06.02.2011
comment
@Dangermouse, я не знаю. Я никогда раньше не работал с cocos2d. Вы должны задать это как отдельный вопрос. - person David; 06.02.2011