2012-01-05 3 views
2

Привет Я изо всех сил, чтобы понять, как цикл через массив ниже и добавить каждую строку в моей основной сущности данныхКак загрузить этот массив в Core Data Entity?

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

//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 
), 

ответ

4

Если все у вас есть 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]; 
    } 

Лучше иногда

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

//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 select Editor -> Создать подкласс NSManagedObject.
  3. import или @class ваш новый подкласс, если вы хотите его отсылать.

BTW

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

Хорошо, простите, я, возможно, упростил свой вопрос слишком много, чтобы облегчить его понимание. Я сказал, что у меня есть только четыре имени столбца (Phone, CompanyName, ContactName & Notes), правда, у меня около 30 столбцов и более 400 строк. Это действительно список клиентов, который я пытаюсь импортировать, поэтому я думаю, что буду использовать ваш метод «для». Однако я получаю ошибки.В 1-й строке я получаю 'redefinition of i' &' expected; в 'for' statement specifier'. Во второй строке 'тип приемника NSManagedObject для сообщения экземпляра не объявляет метод с селектором: 'objectForKey:' Можете ли вы мне помочь? – msec

+0

ОК, я исправил первый, как это должно быть 'for (NSUInteger i = 0; i <[importArray count]; i ++) {' Я бы отредактировал его, но мне не хватает XP для редактирования. Как я могу исправить ошибку второй строки и подкласс объекта, как вы предлагаете? – msec

+0

Отредактировал свой ответ. – shannoga

Смежные вопросы