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

指定子を使用してフォーマットしないでください(現在の iOS バージョンでNSIntegerは typedef されているだけです)。文字列形式で書くということは、基本的に「オブジェクトを呼び出して結果を使う」ということです。 しかし NSInteger はオブジェクトではなく、プリミティブ型です。 listID が 42 のときにメモリ アドレス 42 のオブジェクトにアクセスすると、メモリ例外が発生します。int%@%@description

-(NSDictionary *)syncWithList:(NSInteger)listID
                               ^^^^^^^^^
NSString *urlit = [NSString stringWithFormat:@"http://0.0.0.0:3000/lists/%@/syncList.json?auth_token=%@",@"xxxxxxxxxxx",listID];
                                                                                                     ^^

listID%iの代わりにフォーマット指定子を使用してください。%@

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];

2 番目の引数は 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 に答える