UIProgressbar метод обновления - PullRequest
       19

UIProgressbar метод обновления

2 голосов
/ 23 сентября 2011

Здравствуйте, я пытаюсь написать метод, который обновляет UIProgressbar!

Проблема заключается в том, что когда оба значения приходят в метод в порядке (отображаемые значения NSLog), операция делениясгенерировать bad_access при запуске приложения !!

Я перепробовал много сообщений из обоих значений, таких как intValue / inValue ...

Помогите мне решить эту проблему и как я могу напечатать значения NSNumber

-(void)UpdateProgressbar:(NSNumber *)currentOperationNumer TotalOperationNumber:(NSNumber*)n
{
     NSLog(@" operation : %i",currentOperationNumer);
     NSLog(@" total : %i",n);

     if (currentOperationNumer<=n) 
     {
        [downloadBar setProgress:(currentOperationNumer/n )];
    NSLog(@"progress !");
     }
     else
     {
    [self.view removeFromSuperview];
     }
}

Ответы [ 5 ]

0 голосов
/ 06 февраля 2012

убедитесь, что downloadBar.progress является float и имеет значение от 0.0 до 1.0 включительно.

Пожалуйста, попробуйте это:

ток плавания = 0.0f; число с плавающей запятой = 100.0f;

while (прочее ..) { downloadBar.progress = current / count; }

должно работать без проблем.

0 голосов
/ 23 сентября 2011

Лучший способ отладки EXC_BAD_ACCESS:

  1. Если вы не используете XCode 4, обновитесь.
  2. В XCode 4 нажмите CMD-I для запуска инструментов.
  3. Выберите профиль Зомби. (Справочная информация: EXC_BAD_ACCESS означает, что вы отправляете сообщение освобожденному объекту. Зомби включает функцию зомби, так что объекты с сохраняемым счетчиком 0 не освобождаются, но сохраняются как зомби. Класс NSZombie вызывает исключение всякий раз, когда сообщение отправляется на него - таким образом, его можно поймать и определить точку отправления.)
  4. Запустите ваше приложение с помощью инструментов. Когда происходит сбой, инструменты выводятся на передний план с всплывающим выноском, который указывает на память, которая была освобождена, но к ней обращались.
  5. Вы можете щелкнуть маленькую стрелку в нижнем правом углу, это даст вам историю выделения / сохранения / выпуска памяти и код, выполняющий действие. Нажмите на исходный столбец, и вы попадете на эту строку в коде.
0 голосов
/ 23 сентября 2011

NSNumber - это обёртка объекта для различных примитивных типов, с чем вы пытаетесь разделить указатель по указателю.

возможно попробуйте связать код с ..

[downloadBar setProgress:([currentOperationNumer intValue] / [n intValue])];
0 голосов
/ 23 сентября 2011

Вы можете распечатать значение, используя следующий код

-(void)UpdateProgressbar:(NSNumber *)currentOperationNumer TotalOperationNumber:(NSNumber*)n
{
     NSLog(@" operation : %@",currentOperationNumer);
     NSLog(@" total : %@",n);

     if (currentOperationNumer<=n) 
     {
        [downloadBar setProgress:(currentOperationNumer/n )];
    NSLog(@"progress !");
     }
     else
     {
    [self.view removeFromSuperview];
     }
}
0 голосов
/ 23 сентября 2011

try [currentOperationNumber intValue] вместо currentOperationNumber (или floatValue, если setProgress ожидает float).Итак ...

int myProgress = [currentOperationNumber intValue] / [n intValue];
[downloadBar setProgress:myProgress];

На самом деле, разве это не значение с плавающей точкой, которого он ожидает там?

...