2

您好,我正在尝试编写一个更新 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];
     }
}
4

5 回答 5

0

确保 downloadBar.progress 是一个浮点数,并且从 0.0 到 1.0(含)。

请试试这个:

浮动电流 = 0.0f;浮点数 = 100.0f;

while (stuff..) { downloadBar.progress = current / count; }

它应该可以正常工作。

于 2012-02-06T02:04:57.627 回答
0

尝试[currentOperationNumber intValue]代替currentOperationNumber(如果 setProgress 需要浮点数,则使用 floatValue)。所以....

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

实际上,它不是它期望的浮点值吗?

于 2011-09-23T10:38:42.167 回答
0

调试 EXC_BAD_ACCESS 的最佳方法:

  1. 如果您不使用 XCode 4,请升级。
  2. 在 XCode 4 中,按 CMD-I 运行 Instruments。
  3. 选择僵尸配置文件。(背景:EXC_BAD_ACCESS 表示您正在向已释放的对象发送消息。Zombies 开启了僵尸功能,因此保留计数为 0 的对象不会被释放,而是保持为僵尸。NSZombie 类在收到消息时引发异常被发送给它 - 因此它可以被困住,并识别出原点。)
  4. 通过 Instruments 运行您的应用程序。当它崩溃时,仪器将被带到前台,并弹出一个标注,指示已释放但已访问的内存。
  5. 您可以单击右下角的小箭头,这将为您提供该内存的分配/保留/释放历史记录,以及执行该操作的代码。单击源列,它将带您到代码中的那一行。
于 2011-09-23T18:34:34.197 回答
0

NSNumber 是各种原始类型的对象包装器,您正在尝试将指针除以指针..

也许尝试将代码链接到..

[downloadBar setProgress:([currentOperationNumer intValue] / [n intValue])];
于 2011-09-23T10:46:53.997 回答
0

您可以使用以下代码打印值

-(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];
     }
}
于 2011-09-23T10:53:07.933 回答