ios - NSURLConnection 两次后崩溃
<p><p>我使用下面的地址来下载一个 mp3 文件。我有一个 <code>uitoolbarbutton</code>,当点击这个按钮时,我调用 <code>downloadandCreatePath</code> 然后它创建一个 View ,其中包含 my`downloadProgressV' 和一个用于取消下载的 UIButton。</p>
<p>我点击下载 View 出现并下载。下载成功,如果我取消,它也可以正常工作。</p>
<p>问题是,如果我做第二次,然后第三次。该应用程序第三次崩溃,并在我的 <code>appdelegate</code> 上显示 <code>EXC_BAD_ACCESS</code> 消息。</p>
<pre><code>NSURLResponse *urlResponse;
NSMutableData *downloadedMutableData;
NSURLConnection *connectionManager;
- (NSString *) downloadandCreatePath: (int) doaId
{
@try {
self.downloadProgressV.progress=0.0;
self.downloadView.hidden=NO;
NSString *stringURL = @"http://www.ergmusic.com/mp3-samples/488000/488799.mp3";
NSURLRequest *urlRequest =
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval:60.0];
connectionManager = [ initWithRequest:urlRequest delegate:self];
if (!connectionManager) {
// Release the receivedData object.
downloadedMutableData = nil;
// Inform the user that the connection failed.
}
}
@catch (NSException *exception) {
NSLog(@"buuuuuuug");
return @"";
}
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
;
urlResponse = response;
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
;
self.downloadProgressV.progress = ((100.0/urlResponse.expectedContentLength)*downloadedMutableData.length)/100;
}
- (void)connection:(NSURLConnection *)connection
didFailWithError:(NSError *)error
{
connectionManager = nil;
downloadedMutableData = nil;
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
self.downloadProgressV.progress=0.0;
self.downloadView.hidden = YES;
connectionManager = nil;
downloadedMutableData = nil;
}
- (IBAction)cancelDownloadTouchUpInside:(id)sender {
self.downloadView.hidden=YES;
;
connectionManager = nil;
downloadedMutableData = nil;
}
</code></pre>
<p>有人知道我的问题出在哪里吗?</p>
<p><strong>更新</strong></p>
<p>我尝试使用以下指令使用 <code>nszombies</code> 调试应用程序:</p>
<p> <a href="http://michalstawarz.pl/2014/02/22/debug-exc_bad_access-nszombie-xcode-5/" rel="noreferrer noopener nofollow">http://michalstawarz.pl/2014/02/22/debug-exc_bad_access-nszombie-xcode-5/</a> </p>
<p>但是这次没有出现错误。</p>
<p><strong>更新</strong></p>
<p>我在 <code>viewdidload</code> 方法中实例化 <code>NSMutableData</code>。</p>
<p>我也尝试在 <code>downloadandCreatePath</code> 的第一行实例化它,但我仍然看到错误。</p>
<p><strong>更新</strong>
错误发生在 <strong>2 次运行</strong> 之后,当我想尝试初始化 <code>connectionManager</code> 时。我想知道为什么在两次运行和第三次尝试后会出现问题。为什么它在第一次运行和第二次尝试后没有直播?!!</p>
<p><strong>更新</strong></p>
<p>我认为下面的堆栈跟踪更好:</p>
<pre><code> <_NSCallStackArray 0x94ee270>(
0 ??? 0x097c85cf 0x0 + 159155663,
1 MafatihTebyan 0x00010cb4 - + 404,
2 MafatihTebyan 0x000114be - + 94,
3 libobjc.A.dylib 0x0181f874 - + 77,
4 UIKit 0x0057d0c2 - + 108,
5 UIKit 0x00851c9b - + 139,
6 libobjc.A.dylib 0x0181f874 - + 77,
7 UIKit 0x0057d0c2 - + 108,
8 UIKit 0x0057d04e - + 61,
9 UIKit 0x006750c1 - + 66,
10UIKit 0x00675484 - + 577,
11UIKit 0x00674733 - + 641,
12UIKit 0x005ba51d - + 852,
13UIKit 0x005bb184 - + 1232,
14UIKit 0x0058ee86 - + 242,
15UIKit 0x0057918f _UIApplicationHandleEventQueue + 11421,
16CoreFoundation 0x01a1383f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15,
17CoreFoundation 0x01a131cb __CFRunLoopDoSources0 + 235,
18CoreFoundation 0x01a3029e __CFRunLoopRun + 910,
19CoreFoundation 0x01a2fac3 CFRunLoopRunSpecific + 467,
20CoreFoundation 0x01a2f8db CFRunLoopRunInMode + 123,
21GraphicsServices 0x0303b9e2 GSEventRunModal + 192,
22GraphicsServices 0x0303b809 GSEventRun + 104,
23UIKit 0x0057bd3b UIApplicationMain + 1225,
24MafatihTebyan 0x00008a2d main + 141,
25libdyld.dylib 0x03c1d725 start + 0,
26??? 0x00000001 0x0 + 1
)
</code></pre>
<p><strong>重要更新</strong></p>
<p>我注意到代码在第一次调用时也无法在 iOS 6 上运行。在 iOS 6 中它一直在崩溃。</p>
<p><strong>更新</strong></p>
<p>我为 <code>NSURLConnection</code> 看到的所有示例都使用 <code>viewdidload</code> 来创建请求文件。我在一个方法中使用它并一次又一次地调用这个方法。因为每次通话时网址都会发生变化。请问这个有什么问题吗?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>如果您在第一次下载完成之前启动第二次下载,如果您重新实例化 <code>NSMutableData</code>(您没有向我们展示),旧的 <code>NSMutableData</code> 将被释放,导致僵尸相关的错误。您要么需要维护一个 <code>NSMutableData</code> 对象数组,要么为每次下载实例化一个新的委托(delegate)对象。</p></p>
<p style="font-size: 20px;">关于ios - NSURLConnection 两次后崩溃,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/24229876/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/24229876/
</a>
</p>
页:
[1]