在部署我的应用程序时,我收到错误消息:“线程1:程序接收信号:”EXC_BAD_ACCESS“。
我的代码如下:
-(NSDictionary *)syncWithList:(NSInteger)listID
{
NSString *urlit = [NSString stringWithFormat:@"http://0.0.0.0:3000/lists/%@/syncList.json?auth_token=%@",@"xxxxxxxxxxx",listID];
// **Here I got the error message: "Thread 1:Program received signal: "EXC_BAD_ACCESS"**
NSLog(@"url: %@",urlit);
NSURL *freequestionurl = [NSURL URLWithString:urlit];
ASIHTTPRequest *back = [ASIHTTPRequest requestWithURL:freequestionurl];
[back startSynchronous];
self.listData = [[back responseString] objectFromJSONString];
NSLog(@"%@",listData);
NSDictionary *dicPost = [listData objectAtIndex:0];
return dicPost;
}
非常感谢!!!!
答案 0 :(得分:12)
您不得使用NSInteger
说明符格式化int
(在当前iOS版本上只是typedef'd %@
)。以字符串格式编写%@
基本上意味着“在对象上调用description
并使用结果”
但NSInteger不是一个对象,它是一种原始类型
你得到一个内存异常,因为当listID是42时,你访问内存地址42的对象。这绝对不是你想要的。
-(NSDictionary *)syncWithList:(NSInteger)listID
^^^^^^^^^
NSString *urlit = [NSString stringWithFormat:@"http://0.0.0.0:3000/lists/%@/syncList.json?auth_token=%@",@"xxxxxxxxxxx",listID];
^^
只需使用%i
格式说明符而不是%@
作为listID。
NSString *urlit = [NSString stringWithFormat:@"http://0.0.0.0:3000/lists/%@/syncList.json?auth_token=%i",@"xxxxxxxxxxx",listID];
答案 1 :(得分:1)
尝试创建一个异常断点,它可能指向您的代码所在的行,这可以帮助您找出问题。
答案 2 :(得分:0)
你在这一行中犯了非常普遍的错误
NSString *urlit = [NSString stringWithFormat:@"http://0.0.0.0:3000/lists/%@/syncList.json?auth_token=%@",@"xxxxxxxxxxx",listID];
第二个参数是NSInteger类型,但是在格式中你使用%@
,这只是对象,编译器认为你的listID是对象的地址。
正确的格式为%li
:
NSString *urlit = [NSString stringWithFormat:@"http://0.0.0.0:3000/lists/%@/syncList.json?auth_token=%li",@"xxxxxxxxxxx",listID];
答案 3 :(得分:0)
您使用了错误的数据类型进行打印。
NSLog(@"%@",listData);