2010-12-13 4 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”. 

내가 첫 줄을 주석 처리하면 두 번째 줄에서 여전히 명백하게 실패합니다. 어떤 아이디어가 문제 일 수 있겠습니까? 아마도 내 전환이 잘못되었을 수 있습니다. 저는 여기에이 코드 조각을 사용하고있는 두 가지 방법은 다음과 같습니다

- (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;)를 사용해야합니다. 그런 다음 release-dealloc에 호출합니다. 또한

,

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

searchResultFileSizeNSNumber 목적은, 출력 할 수 %@ 형식 지정자 사용하여 NSNumber의 가치 : 더 나은

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

또는,'NSLog을 (@ "파일 크기 : % @ ", searchResultFileSize); ' –

+0

.. 그리고 HUD 진행에 관한 부분은 어떨까요? – fuzz

+0

Jacob의 reco에 따라 NSNumber를 그대로 유지하면 문제가 없습니다. – Rog

관련 문제