У меня есть N классов основных объектов данных. У каждого класса свойства несколько разные.Создание универсального метода для всех классов ... возможно?
Я заполняю все сущности данными из файла . Первая строка файла содержит заголовок, который может быть как это:
code1,code2,code3,code4,ref1,ref2
или может быть, как это
code1,code2,code3,ref1
или другими словами, различное число «кода» и различным числом «ref»
Элементы этого заголовка имеют точное имя свойств основного объекта данных, который он представляет, и сущность имеет то же имя файла.
Пример:
- имя файла
Cars.csv
Cars.csv
заголовокcode1,code2,code3,ref1
имя- Entity является
Cars
Cars
объект имеет свойства code1, Кодекса2, code3 и реф.
Сказал, что это то, что я хочу.
У меня есть метод, который читает файл csv, строко за строкой и будет использоваться для заполнения базы данных. Метод до сих пор, как это:
- (void) populateDatabaseEntityFromFile:(NSString *)fileName {
// all lines of the file are stored on array
NSArray* allLines = [self readAllLinesOfFile:fileName];
//get the header
NSString *firstLine = [linhas objectAtIndex:0];
NSArray *header = [firstLine componentsSeparatedByString: @","];
// iterate over all lines... start with i=1 to ignore the header
for (int i=1; i<[allLines count]; i++) {
NSString *oneLine = [allLines objectAtIndex:i];
NSArray *valuesOnLine = [oneLine componentsSeparatedByString: @","];
// MAGIC COMMAND 1 HERE
// insert a new object on a core data entity
// iterate over the values of a line
for (int i=0; i<[header count]; i++) {
NSInteger oneValue = [[valuesOnLine objectAtIndex:i] integerValue];
NSString *oneProperty = [header objectAtIndex:i];
// MAGIC COMMAND 2 HERE, to populate the entity
}
}
, что я имею в виду магических команд 1 и 2 заключается в следующем:
MAGIC COMMAND 1
На данный момент мне нужно вставить новый объект на сущности.
Если это зашито в конкретной организации, я хотел бы сделать это как
Entity1 *newObj = [Entity1 insertNewObjectImManagedObjectContext:self.managedObjectContext];
, но я не могу его проводных entity1. Мне нужно что-то родовое, как:
"entity that has the same name as fileName" *newObj = ["entity that has the same name as fileName" insertNewObjectImManagedObjectContext:self.managedObjectContext];
MAGIC COMMAND 2
Пришло время для заполнения базы данных после того, как объект создается с помощью волшебной команды 1, я могу сделать
[newObj setValue:@(oneValue) forKey:oneProperty];
так, как я могу сделать эту магическую команду 1?
BRILLIANT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! БЛАГОДАРЯ – SpaceDog