2009-08-31 3 views
0

Моя программа работает так, как я хочу, чтобы он и на iPhone симулятор и сам iPhone при использовании отладки построить. Однако, когда я меняю его на сборку релизов, его работы на симуляторе iPhone, но не на устройстве. Я пытаюсь анимировать мяч по экрану таймером, и мяч должен отскакивать от сторон, если он сталкивается с краями экрана. Это отлично подходит для отладочных сборников, но сборка релизов работает только на симуляторе, а не на устройстве. Мяч даже не перемещается по устройству с помощью сборки релиза.iPhone релиз сборки не работает так же, как отладка построить

У меня такое чувство, что это связано с уровнем оптимизации, который изменяется при переключении с отладки на сборку выпуска. Если это так, как я могу изменить свой код, чтобы лучше подойти к уровню оптимизации?

Контроллер вид вызывается с initWithNibName: который содержит:

CGRect ballRect = CGRectMake(133, 424, 55, 56); 
newBall = [[Ball alloc] initWithFrame: ballRect]; 
[self.view addSubview: newBall]; 
[self setImage: [UIImage imageNamed: @"Red.png"]]; 

Бал * newBall был объявлен в файле интерфейса. Мяч правильно отображается на экране с правильным изображением на всех строках.

Таймер для перемещения мяча вызывается, когда пользователь нажимает на экран:

-(void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event{ 
    touch = [touches anyObject]; 
    touchPoint = [touch locationInView: self.view]; 
    dx = touchPoint.x - newBall.center.x; 
    dy = touchPoint.y - newBall.center.y; 
    newBallTimer = [NSTimer scheduledTimerWithTimeInterval: 1.0/50.0 target: self selector: @selector(moveBall) userInfo: nil repeats: YES]; 
} 

CGPoint TouchPoint, UITouch * осязание, поплавок дх, поплавок ду и NSTimer * newBallTimer были в файле интерфейса объявлены слишком.

Вот мой код для перемещения мяча и обнаружения коллизий:

-(void) moveBall 
{  
    newBall.center = CGPointMake(newBall.center.x + dx, newBall.center.y + dy); 

    // left boundary 
    if(newBall.frame.origin.x <= 20) 
    { 
     dx = abs(dx); 
    } 
    else if(newBall.center.x >= 280) 
    { 
     dx = -abs(dx); 
    } 
}  

На релиз сборки на устройстве мяч не двигается. Вместо этого он, кажется, отправляется в нижней части экрана и остается там.

Любые предложения/решения/идеи заслуживают высокой оценки. Спасибо заранее!

+0

Думаю, вам нужно будет показать нам код. Попытайтесь уменьшить код как можно больше, нам будет легче обнаружить ошибку, и иногда вы даже обнаружите ошибку самостоятельно в этом процессе. – zoul

+0

Хорошо, что я разместил код. Надеюсь это поможет. – 2009-08-31 21:06:26

+0

Сравните ваши две конфигурации сборки для различий. Возможно, у вас есть что-то определенное в отладке, но оно не определено в выпуске. Симулятор не всегда корректен, поэтому оставьте это из уравнения. – Jab

ответ

0

Как вы получаете версию релиза на свое устройство? Или вы имеете в виду сборку Ad Hoc?

В любом случае, есть ли у вас какие-либо блоки кода #define или #ifdef, которые, возможно, закомментированы при создании выпуска?

Другая возможность делает фактическую логику в NSAssert, а затем отключает утверждения в сборке релизов. Когда вы выключаете утверждения, любой код в этом утверждении не будет вызываться.

+0

Спасибо за ваш ответ. Чтобы установить выпуск на устройство, я установил активный SDK на iPhone Device 3.0 и активную конфигурацию для выпуска в Xcode. У меня есть #define заявления, а также #include, но ни один из них не был прокомментирован. Я не использую NSAssert. – 2009-08-31 20:56:39

 Смежные вопросы

  • Нет связанных вопросов^_^