О, эту проблему легко решить. weightInKilos
и weightInPounds
являются NSNumber
экземплярами. Когда вы используете форматер %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...
, вы должны обязательно его освободить. В вашем коде это означает weightText
и cellText
.
PS: DDUnitConverter - отличная находка. Мне придется оставить его в закладке, если он мне понадобится в будущих проектах.