10

在部署我的应用程序时,我收到错误消息:“线程 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;
}

非常感谢!!!!

4

4 回答 4

23

您不能使用说明符进行格式化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];
于 2012-04-06T08:05:40.550 回答
1

编辑:所以习惯于从 Xcode 中获取错误,而它没有给我任何我忽略的线索,我没有注意到有问题的线路已经知道。我将把它留在这里,希望它对将来的人有所帮助。

尝试创建一个异常断点,它可能会直接指向您的代码所在的行,这应该可以帮助您找出问题所在。

  1. 切换到左侧导航器中的断点“选项卡”。
  2. 点击底部的小“+”。
  3. 如镜像所显示,创建一个断点:
  4. 运行你的代码,看看它在哪里弹出。

断点添加

于 2012-04-06T07:54:23.833 回答
1

您使用错误的数据类型打印出来。

NSLog(@"%@",listData);
于 2012-06-21T06:35:37.637 回答
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];
于 2012-04-06T08:08:14.727 回答