2010-04-13 89 views
0

我想要得到的代碼在這裏找到:在異步NSURLConnection中使用MBProgressHUD?

http://snipplr.com/view/26643/mbprogresshud-with-an-asynchronous-nsurlconnection-call/

在我的項目工作。它使用私人MBProgressHUD類,但我不斷收到第69或70行exc_bad_access錯誤取決於如果你註釋掉日誌語句:

NSLog(@「float filesize:%f」,[self.searchResultFileSize floatValue]); HUD.progress = [resourceLength floatValue]/[self.searchResultFileSize floatValue];

問題是與searchResultFileSize轉換爲floatValue,雖然我無法弄清楚爲什麼。調用相同的變量一行

NSLog(@「filesize:%d」,self.searchResultFileSize);

工作正常。只有我想出的想法是,它可能是一些線程問題?

任何想法??還是有沒有人有一個如何使用MBProgressHUD與異步NSURLConnections的工作示例?

P.S.我嘗試使用原始的MBProgressHUD代碼,它指定一個像這樣的調用:

[HUD showWhileExecuting:@selector(myProgressTask)onTarget:self withObject:nil animated:YES];

但是這不起作用,因爲myProgressTask使用NSURLConnection,它使用委託,因此上面的代碼將執行方法調用myProgressTask,然後在響應回來之前隱藏自己。

回答

0

當你

NSLog(@"filesize: %d", self.searchResultFileSize); 

你是一個指針的整數值打印出一個NSNumber,我認爲(第53行的指針賦值給一個NSNumber到searchResultFileSize)。在第53行,返回並分配給searchResultFileSize的NSNumber是autoreleased - 它在我看來好像它可能在那裏和當你嘗試在第69行上訪問它時被解除分配。即使它被釋放,它仍然有指針的整數值,所以

NSLog(@"filesize: %d", self.searchResultFileSize); 

的工作,但任何試圖調用的NSNumber實例的方法,它應該指向將失敗與EXC_BAD_ACCESS。然而,沒有看到接口定義,特別是在searchResultFileSize被定義的地方,我無法確定。

+0

感謝您的解釋。 – Tony 2010-04-13 19:34:55

+1

我應該提到:如果你在10.6上工作,Xcode在Build菜單中有一個「Build and Analyze」選項,這通常有助於強調保留/釋放/內存管理問題。 – Isaac 2010-04-13 19:38:26