Как загрузить этот массив в Core Data Entity? - PullRequest
2 голосов
/ 05 января 2012

Привет, я изо всех сил пытаюсь выяснить, как перебрать массив ниже и добавить каждую строку в мой основной объект данных

Любая помощь будет принята с благодарностью

//CREATE AN ARRAY FROM CSV DOCUMENT USING CHCSVPARSER
NSError *error;
NSString *customerCSV = [[NSBundle mainBundle] pathForResource:@"CUSTOMERS" ofType:@"csv"];
NSArray *importArray = [NSArray arrayWithContentsOfCSVFile:customerCSV encoding:NSUTF8StringEncoding error:&error];
NSLog(@"%@",importArray);

//LOOP THROUGH CREATED ARRAY AND ADD OBJECTS TO COREDATA CUSTOMER ENTITY
Invoice_MarketAppDelegate* delegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext* managedObjectContext = delegate.managedObjectContext;
NSManagedObject* newCustomer;
newCustomer = [NSEntityDescription insertNewObjectForEntityForName:@"Customers" inManagedObjectContext:managedObjectContext];

Я не знаю, что здесь делать.

for () {
    NSLog(@"importing Row");

}

Вот журнал атрибутов, которые я буду импортировать, предоставленный командой

 NSLog(@"%@",importArray);

поскольку csv включает имена столбцов

(

    CONTACTNAME,
    PHONE,
    COMPANYNAME,
    NOTES
),

1 Ответ

4 голосов
/ 05 января 2012

Если у вас есть только 4 объекта, не зацикливайтесь, вы можете просто -

Если у вас есть подкласс клиентов, вы можете использовать:

 newCustomer.contactName = [importArray objectAtIndex:0];//change it to the correct index, and correct property name
 newCustomer.phone = [importArray objectAtIndex:1];
 //....And so on

иначе вам нужно будет использовать

 [newCustomer objectForKey:@"contactName"] = [importArray objectAtIndex:0];

НО

Если у вас много свойств в CSV, вы можете установить другой массив ключей в вашей сущности и -

     for(NSUInteger i=0;i<[importArray count];i++){
       [newCustomer objectForKey:[keysArry objectAtIndex:i]] = [importArray objectAtIndex:i];  
     }

Лучше иногда

Лучший способ справиться с этим, особенно если у вас много свойств, -

 //1. crate a dictionary from your CSV with keys that are similar to your entity property names.
 NSDictionary *csvDictinary = []//set your dictionary.
 //2.get all the property names from your customers entity
 NSDictionary *attributes = [[NSEntityDescription
                             entityForName:@"Costumer"
                             inManagedObjectContext:self] attributesByName];
//3. set the properties to your entity
for (NSString *attr in attributes) {
    [Costumer setValue:[csvDictinary valueForKey:attr] forKey:attr];
}

EDIT Подкласс вашей сущности:

  1. выберите объект в редакторе моделей.
  2. в меню Xcode выберите Editor -> Create NSManagedObject Subclass.
  3. импортируйте или @class свой новый подкласс, если вы хотите сослаться на него.

КСТАТИ

  1. Подкласс ваших сущностей - это облегчит вашу жизнь и улучшит производительность.
  2. Ваше имя лица должно быть - «Клиент» в единственном числе, так как оно содержит только 1 клиента.
...