2

Program received signal: “EXC_BAD_ACCESS”.次のコードを使用すると、エラーが発生します。

searchResultFileSize私のインターフェースでとして宣言されNSNumberています。どのプロパティに設定すればよいかわかりませんでした。現在、私はそれを次のように持っています:

@property (nonatomic, readonly) NSNumber *searchResultFileSize;

これは正しいです?次の行でエラーが発生します。

NSLog(@"float filesize: %f", [searchResultFileSize floatValue]); //Program received signal:  “EXC_BAD_ACCESS”.
HUD.progress = [resourceLength floatValue] / [searchResultFileSize floatValue]; //Program received signal:  “EXC_BAD_ACCESS”.

最初の行をコメントアウトしても、明らかに 2 行目で失敗します。問題の可能性はありますか?おそらく私の変換は間違っています。このコードを使用している 2 つの方法を次に示します。

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    [responseData setLength:0];

    searchResultFileSize = [NSNumber numberWithLongLong:[response expectedContentLength]];

    NSLog(@"Float filesize: %f", searchResultFileSize);

    if ([searchResultFileSize intValue] != NSURLResponseUnknownLength) {
        HUD.mode = MBProgressHUDModeDeterminate;
        HUD.labelText = @"Getting Results";
    }
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [responseData appendData:data];

    NSNumber *resourceLength = [NSNumber numberWithUnsignedInteger:[responseData length]];
    NSLog(@"resourceData length: %d", [resourceLength intValue]);
    NSLog(@"filesize: %d", searchResultFileSize);
    NSLog(@"float filesize: %f", [searchResultFileSize floatValue]); //Program received signal:  “EXC_BAD_ACCESS”.
    // HUD.progress is a float
    HUD.progress = [resourceLength floatValue] / [searchResultFileSize floatValue]; //Program received signal:  “EXC_BAD_ACCESS”.
    NSLog(@"progress: %f", [resourceLength floatValue] / [searchResultFileSize floatValue]);
}
4

1 に答える 1

4

あなたの問題はここにあります:

searchResultFileSize = [NSNumber numberWithLongLong:[response expectedContentLength]];

あなたはretainそれを維持するためにそれを必要とします、それは自動解放されます。

searchResultFileSize = [[NSNumber numberWithLongLong:[response expectedContentLength]] retain];

プロパティを として設定することをお勧めします。そうすれば、コードで(nonatomic, retain)それを行う必要はありません。さらに、直接割り当てではなくretain、プロパティ セッター ( ) を使用する必要があります。次に、でself.searchResultFileSize = x;呼び出します。release-dealloc

また、

NSLog(@"Float filesize: %f", searchResultFileSize);

searchResultFileSizeがオブジェクトの場合、フォーマット指定子を使用してNSNumberan の値を出力できます。NSNumber%@

NSLog(@"Float filesize: %@", searchResultFileSize);
于 2010-12-13T05:30:20.097 に答える