【发布时间】:2011-11-13 01:17:44
【问题描述】:
在执行 NSURLConnection 委托方法 connectionDidFinishLoading 时出现错误。有趣的是,它适用于模拟器,但它在物理设备上崩溃。更有趣的是,它只有在完成这一系列操作时才会崩溃,
- 运行应用程序
- 显示推文! (太棒了)
- 按主页按钮
- 双击主页按钮
- 强制退出应用程序
- 再次打开应用
- 崩溃了!!!!!! ( :( )...一直崩溃,直到您重新启动手机!
错误日志:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0xa0000008
Crashed Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libobjc.A.dylib 0x321befbc 0x321bb000 + 16316
1 Tittle-Tattle 0x0002cf10 -[MapViewController connectionDidFinishLoading:] (MapViewController.m:108)
2 Foundation 0x3316bc32 0x330a5000 + 814130
3 Foundation 0x330c36e2 0x330a5000 + 124642
4 Foundation 0x330c36ac 0x330a5000 + 124588
5 Foundation 0x330c35ce 0x330a5000 + 124366
6 CFNetwork 0x35e7689e 0x35e67000 + 63646
7 CFNetwork 0x35e6b53e 0x35e67000 + 17726
8 CFNetwork 0x35e6b632 0x35e67000 + 17970
9 CFNetwork 0x35e6b23c 0x35e67000 + 16956
10 CFNetwork 0x35e6b172 0x35e67000 + 16754
11 CoreFoundation 0x34176afc 0x340e9000 + 580348
12 CoreFoundation 0x341762c8 0x340e9000 + 578248
13 CoreFoundation 0x3417506e 0x340e9000 + 573550
14 CoreFoundation 0x340f84d6 0x340e9000 + 62678
15 CoreFoundation 0x340f839e 0x340e9000 + 62366
16 GraphicsServices 0x3254dfc6 0x3254a000 + 16326
17 UIKit 0x3734e73c 0x3731d000 + 202556
18 Tittle-Tattle 0x000200e0 main (main.m:16)
19 Tittle-Tattle 0x00020084 start + 32
代码:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[urlConnection cancel];
[urlConnection release];
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
//Since we got new fresh data we shall put it in LatestLocationData entity in CoreData
[self insertLastKnownLocationDataIntoCoreDataWith:responseString];
//Test purpose only, See what we have got in CoreData
[self fetchLastKnownLocationDataFromCoreData];
NSDictionary *results = [responseString JSONValue];
placesNearBy = [results objectForKey:@"results"];
[responseString release];
[self dropNearByPlacesAnnotationsFrom:placesNearBy];
}
问题:这可能是什么原因?
类似的问题(不是我!)以前问过但没有人回答这个问题:Application not running in iOS 5
到目前为止,我的理解是,EXE_BAD_ACCESS 仅在您尝试访问尚未分配的内存地址或之前已分配但现在已释放的内存地址时发生。
在评论回复后编辑:
嘿 Firoze,我就是这样初始化 NSURLConnection
urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
【问题讨论】:
-
@FirozeLafeer 嘿,伙计!我添加了 init 方法。有问题:) 谢谢。我在那里释放 NSString 因为我是 alloc 并且 init 是相同的函数。我想我应该释放它是吗?否则会泄漏
-
responseData 来自哪里?是否在创建它的地方保留它?
-
@Brogrammer 无视我对 responseString 的评论。没关系,我没有直接在那里思考。我错过了那部分。
-
@coneybeare 是的,当我创建 responseData 时,我有这样的代码: responseData = [[NSMutableData data] retain];我希望这是正确的创建方式:(
-
代码中的第 108 行是哪一行(发生错误访问的地方)?
标签: ios objective-c xcode ios5 exc-bad-access