使用stringWithFormat时EXC_BAD_ACCESS?

时间:2012-04-06 07:25:03

标签: ios xcode

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

答案 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)

编辑:因此习惯于从Xcode中获取错误而没有给我任何线索我忽略了注意到麻烦的线路已经知道了。我将此留在这里,希望将来有人帮助。

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

  1. 切换到断点'标签'在左手导航器中。
  2. 点击小' +'在底部。
  3. 创建一个断点,如图所示:
  4. 运行您的代码,看看它弹出的位置。
  5. Breakpoint adding

答案 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);