0

以下のメソッドでは、「urlString」変数を含む行で「EXC_BAD_ACCESS」を受け取ります。私の調査によると、プログラムが既に解放されている変数にメッセージを送信すると、このエラーが発生することが示唆されています。ただし、ARC を使用しているため、手動でメモリを解放することはありません。ARC がこの変数をすぐに解放しないようにするにはどうすればよいですか?

-(NSMutableArray *)fetchImages:(NSInteger *)count {
//prepare URL request
NSString *urlString = [NSString stringWithFormat:@"http://foo.example.com/image?quantity=%@", count];

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];

//Perform request and get JSON as a NSData object
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

//Parse the retrieved JSON to an NSArray
NSError *jsonParsingError = nil;
NSArray *imageFileData = [NSJSONSerialization JSONObjectWithData:response options:0 error:&jsonParsingError];

//Create an Array to store image names

NSMutableArray *imageFileNameArray;

//Iterate through the data
for(int i=0; i<[imageFileData count];i++)
{
    [imageFileNameArray addObject:[imageFileData objectAtIndex:i]];

}

return imageFileNameArray;

}
4

2 に答える 2

6

あなたの問題はARCとは何の関係もありません。 はクラスではないため、この形式 NSIntegerを使用したくありません。システムがオブジェクトであると考えるものにメソッドを送信しようとしていますが、オブジェクトではないことが判明した場合-CRASH. 問題を解決するには、次の 2 つのオプションがあります。%@%@description

  1. あなたが望むかもしれません:

    NSString *urlString = 
      [NSString stringWithFormat:@"http://foo.example.com/image?quantity=%d",
            *count];
    

    count最初にポインタが有効である ことを確認してください!

  2. メソッドのシグネチャを次のように変更する必要がある場合があります。

    -(NSMutableArray *)fetchImages:(NSInteger)count;
    

    次に、urlString次のように行を変更します。

    NSString *urlString = 
      [NSString stringWithFormat:@"http://foo.example.com/image?quantity=%d", 
          count];
    

    また、新しい署名と一致するようにすべての呼び出し元を修正する必要があります。

2 番目のオプションは、私にはより「普通」に思えますが、プログラムがなければ、より具体的にすることは不可能です。

于 2012-08-05T04:12:28.977 に答える
2

また、割り当てて初期化することもできます

NSMutableArray *imageFileNameArray;

オブジェクトを追加する前に、そうしないとクラッシュし続けます。だからあなたは持っているでしょう

//Create an Array to store image names

NSMutableArray *imageFileNameArray = [[NSMutableArray alloc] init];
于 2012-08-05T08:06:32.443 に答える