Объект NSNumber не может быть изменен. Это означает, что единственный способ изменить свойство, содержащее NSNumber, - это присвоить ему новый NSNumber. Чтобы делать то, что вы хотите, у вас есть три варианта:
1. Передайте объект Core Data в метод и попросите его напрямую установить свойство.
- (void)updateNumberOf:(MyCoreDataObject *)theObject {
NSNumber *newNumber = ...; // create new number
theObject.number = newNumber;
}
Называется [self updateNumberOf:theCoreDataObject];
2. Попросите метод обновления вернуть новый NSNumber и обновить его в вызывающей программе.
- (NSNumber *)updateNumber:(NSNumber *)oldNumber {
NSNumber *newNumber = ...; // create new number
return newNumber;
}
Вызывается с помощью:
NSNumber *theNumber = theCoreDataObject.number;
theNumber = [self updateNumber:theNumber];
theCoreDataObject.number = theNumber;
3. Передайте указатель на числовую переменную и обновите его в вызывающей стороне (я бы предложил это только вместо варианта 2, если вам нужно вернуть что-то еще).
- (void)updateNumber:(NSNumber **)numberPointer {
if(!numberPointer) return; // or possibly throw an error
NSNumber *oldNumber = *numberPointer;
NSNumber *newNumber = ...; // create new number
*numberPointer = newNumber;
}
Вызывается с помощью:
NSNumber *theNumber = theCoreDataObject.number;
[self updateNumber:&theNumber];
theCoreDataObject.number = theNumber;
Ни в одном из этих примеров я не беспокоился об управлении памятью. Убедитесь, что вы выпускаете / автоматически выпускаете объекты соответствующим образом.
4. (из комментария Грега) Аналогично варианту 1, но передает ключ методу обновления для большей переносимости.
- (void)updateNumberOf:(id)theObject forKey:(NSString *)key {
NSNumber *oldNumber = [theObject valueForKey:key];
NSNumber *newNumber = ...; // create new number
[theObject setValue:newNumber forKey:key];
}
Называется [self updateNumberOf:theCoreDataObject forKey:@"number"];
person
ughoavgfhw
schedule
11.05.2011