2011-06-14 6 views
2

다음 코드를 사용하여 표의 데이터를 kg 단위로 표시합니다.단위 변환에 대한 빠른 질문

어떤 이유로 그것이 올바르게 작동하지 않고 엄청난 숫자를주고 있습니다. 어떤 아이디어?

내가 DDUnitConverter (https://github.com/davedelong/DDUnitConverter을 사용하고 있습니다)

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath 
{ 
    NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    NSString *repsText = [[managedObject valueForKey:@"reps"] description]; 

    NSNumber *weightInPounds = [NSNumber numberWithFloat:[[managedObject valueForKey:@"weight"]floatValue]]; 
    NSNumber *weightInKilos = [[DDUnitConverter massUnitConverter] convertNumber:weightInPounds fromUnit:DDMassUnitUSPounds toUnit:DDMassUnitKilograms]; 

    NSString *weightText = nil; 
    NSString *cellText = nil; 
    BOOL isKgs = [[NSUserDefaults standardUserDefaults] boolForKey:@"wantsKGs"]; 
    if (isKgs == 1) 
    { 
     weightText = [[NSString alloc]initWithFormat:@"%i", weightInKilos]; 
     cellText = [[NSString alloc]initWithFormat:@"Set %i: %@ reps at %@ kgs",indexPath.row + 1, repsText, weightText]; 
    } 
    else 
    { 
     weightText = [[NSString alloc]initWithFormat:@"%i", weightInPounds]; 
     cellText = [[NSString alloc]initWithFormat:@"Set %i: %@ reps at %@ lbs",indexPath.row + 1, repsText, weightText]; 
    } 
    cell.textLabel.text = cellText; 
} 
+1

단위 변환기가 좋았습니다. 오픈 소스와 무료이며 모든 재미있는 것들이 있음에도 불구하고, 함께 들어가는 라이선스가 있다는 것을 기억하십시오. :) –

+0

감사 데이브. 오랫동안 내 사이트에서 프로젝트를 참조하면 괜찮습니까? –

+0

@Faisal nope; "readme"파일을 읽으십시오. 저작권 및 라이센스는 실제 소프트웨어에 포함되어야합니다. –

답변

2

아, 이것은 해결하기 쉬운 문제입니다. weightInKilosweightInPoundsNSNumber 인스턴스입니다. 형식으로 %i 포매터를 사용하면 정수를 제공한다는 의미입니다. 당신이 제공하는 정수는 각 객체에 대한 포인터 값입니다. 각 NSNumber의 문자열 값을 원하므로 인스턴스 메서드 -stringValue을 사용합니다.

다음은 이러한 변경 사항을 기반으로 한 코드의 업데이트 된 버전입니다.

- (void) configureCell: (UITableViewCell *) cell atIndexPath: (NSIndexPath *) indexPath 
{ 
    NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath: indexPath]; 
    NSString *repsText = [[managedObject valueForKey: @"reps"] description]; 

    NSNumber *weightInPounds = [NSNumber numberWithFloat: [[managedObject valueForKey: @"weight"] floatValue]]; 
    // Alternatively you could just use ‘[managedObject valueForKey: @"weight"]’ if the ‘weight’ attribute is a number. 

    NSNumber *weightInKilos = [[DDUnitConverter massUnitConverter] convertNumber: weightInPounds 
                     fromUnit: DDMassUnitUSPounds 
                      toUnit: DDMassUnitKilograms]; 

    BOOL isKgs = [[NSUserDefaults standardUserDefaults] boolForKey:@"wantsKGs"]; 
    NSString *weightText = (isKgs ? [weightInKilos stringValue] : [weightInPounds stringValue]); 

    cell.textLabel.text = [NSString stringWithFormat: @"Set %i: %@ reps at %@ lbs",indexPath.row + 1, repsText, weightText]; 
} 

개체를 처리 할 때 메모리 관리 규칙을 따라야한다는 것을 기억하십시오. -init... 메서드를 사용하여 개체를 만들 때는 반드시 해제해야합니다. 코드에서 weightTextcellText을 의미합니다.

추 신 : DDUnitConverter는 훌륭한 찾기입니다. 내가 미래 프로젝트에서 그것을 필요로한다면 나는 그것을 북마크로 유지해야 할 것이다.