Я не знаю, есть ли какие-либо готовые методы. Например, вам придется отслеживать ключи в отдельном контейнере или определять их как константы где-то, например, в следующем примере:
static NSUInteger const kMyNameIdx = 0U;
static NSUInteger const kMyMajorIdx = 1U;
static NSString * const kMyNameKey = @"name";
static NSString * const kMyMajorKey = @"major";
/* this does no error checking on the mo or array */
/* being null. it would be better to return an */
/* NSError from this function and check its value */
/* to handle error cases */
- (void) updateManagedObject:(NSManagedObject *)mo withOrderedArray:(NSArray *)array
{
id obj;
NSUInteger objIdx = 0U;
/* this assumes that name and major objects in */
/* your array are in the same order as set by */
/* the constants */
for (obj in array) {
switch (objIdx) {
case kMyNameIdx:
[mo setValue:obj forKey:kMyNameKey];
break;
case kMyMajorIdx:
[mo setValue:obj forKey:kMyMajorKey];
break;
default:
break;
}
objIdx++;
}
}
Чтобы использовать это:
NSManagedObject *alice = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:context];
NSArray *myArray = /* ... */
[self updateManagedObject:alice withOrderedArray:myArray];
Существуют дополнительные модификации, которые вы можете внести, например, сделать метод категории для NSManagedObject
типа сущности Student
. Затем вы можете вызывать эту функцию везде, где вы используете Student
управляемые объекты.