2

Program received signal: “EXC_BAD_ACCESS”.使用以下代码时我得到一个。

searchResultFileSizeNSNumber在我的界面中被声明为一个。我不确定将其设置为什么属性。目前我有它:

@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”.

如果我注释掉第一行,第二行显然仍然失败。任何想法可能是什么问题?也许我的转换是错误的。这是我使用这段代码的两种方法:

- (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;) 而不是直接赋值。然后你会调用releasein -dealloc

还,

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

searchResultFileSize是一个NSNumber对象,您可以NSNumber使用%@格式说明符输出 an 的值:

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