2010-12-13 12 views
2

次のコードを使用するとProgram received signal: “EXC_BAD_ACCESS”.が表示されます。Objective-C - プログラム受信信号: "EXC_BAD_ACCESS"。 with(NSNumber floatValue)

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

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

あなたはそれが自動解放され、それを周りに保つために、それをretainする必要があります。

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

私は、あなたがあなたのコード内でretainにそれを持っていないだろう、(nonatomic, retain)としてあなたのプロパティを設定することをお勧め。さらに、直接割り当てとは対照的に、プロパティ設定(self.searchResultFileSize = x;)を使用する必要があります。次に、-deallocreleaseを呼び出します。

また、

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

searchResultFileSizeあなたが出力%@書式指定子使用NSNumberの値ができ、NSNumberオブジェクトです:

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

または、さらに良い: 'のNSLog(@"ファイルサイズを:%@ "、searchResultFileSize); ' –

+0

..そしてHUDの進捗状況についてはどうしたらいいですか? – fuzz

+0

Jacobのrecoによれば、NSNumberをそのまま残してください。あなたは問題ありません。 – Rog

関連する問題