Как добавить данные вручную в базовом объекте данных

Я продолжаю работать Core Data впервые. Я только что создал Entity и Attributes для того объекта. Я хочу добавить некоторые строки как данные (можно сказать, что я хочу добавить данные в таблице).

Ранее, когда я использовал Sqlite, Я добавил бы данные с помощью Terminal. Но здесь в Core Data Я не могу найти способ вручную добавить данные. Я просто хочу добавить данные к Context и отобразите его в a UITableView. Я прошел документацию Core Data но это не объясняет, как добавить данные вручную, хотя это объясняет, как я могу добавить его программно. Но я не должен делать этого программно. Я хочу сделать это вручную.

7
задан Axel Guilmin 3 March 2015 в 13:35
поделиться

2 ответа

Я тоже довольно новичок в CoreData и тоже искал решение для этого. Я был рад найти статью здесь: http://iphoneinaction.manning.com/iphone_in_action/core-data о том, как получить CSV-файл и импортировать данные (ищите Core Data, часть 5: Предварительное заполнение данных).

Вот код, который я использую:

-(void)addData
{
  NSString *paths = [[NSBundle mainBundle] resourcePath];
  NSString *bundlePath = [paths stringByAppendingPathComponent:@"file.csv"];
  NSString *dataFile = [[NSString alloc] initWithContentsOfFile:bundlePath];
  NSArray *dataRows = [dataFile componentsSeparatedByString:@"\n"];
  [dataFile release];
  MyEntity *myMO;

for (int i = 0 ; i < [dataRows count] ; i++) { NSLog(@"Added: %d",i); myMO = (MyEntity *)[NSEntityDescription insertNewObjectForEntityForName:@"MyEntity" inManagedObjectContext:[self managedObjectContext]]; [myMO setAttrib1:[NSNumber numberWithInt:i+1]]; [myMO setAttrib2:[dataRows objectAtIndex:i]]; [self saveAction]; } }

У меня был только один столбец, поэтому мне не понадобился весь код. Вот код из статьи. Если он не имеет смысла, попробуйте посмотреть статью.

CSV файл:

1,A$20,Australian Dollars,20,aussie-20.png
2,R$20,Brazilian Reals,20,brasil-20.png

Код:

- (void)setupCards {
 NSString *paths = [[NSBundle mainBundle] resourcePath];
 NSString *bundlePath = [paths stringByAppendingPathComponent:@"cards.csv"];
 NSString *dataFile = [[NSString alloc] initWithContentsOfFile:bundlePath];
 NSArray *dataRows = [dataFile componentsSeparatedByString:@"\n"];
 [dataFile release];
 Card *card;
 for (int i = 0 ; i < [dataRows count] ; i++)
 {
  NSArray *dataElements = [[dataRows objectAtIndex:i] componentsSeparatedByString:@","];
  if ([dataElements count] >= 4)
  {
   card = (Card *)[NSEntityDescription insertNewObjectForEntityForName:@"Card" inManagedObjectContext:[self managedObjectContext]];
   [card setId:[NSNumber numberWithInt:i]];
   [card setName:[dataElements objectAtIndex:1]];
   [card setType:[dataElements objectAtIndex:2]];
   [card setWorth:[NSNumber numberWithInt:
   [[dataElements objectAtIndex:3] intValue]]];
   [card setImages:[NSSet setWithObject:
   [self setupCardPic:[dataElements objectAtIndex:4]]]];
   [self saveAction:self];
  }
 }
}

Чтобы ответить на ваш комментарий:нет, я хочу добавить данные вручную, аналогично тому, что мы делаем в sqlite через терминал или в sql server с помощью sql запроса. Скачайте FireFox и найдите инструмент Add-On под названием SQLITE MANAGER. Он позволит вам открыть любую базу данных SQLITE, даже созданную вашим приложением. SQLITE MANAGER - это графический интерфейс для баз данных SQLITE, похожий на MS SQL Server Management Studio с меньшими возможностями. Вы можете просматривать, редактировать и добавлять данные через него, НО Я НЕ РЕКОМЕНДУЮ ДОБАВЛЯТЬ ДАННЫЕ через этот инструмент, если вы собираетесь использовать вашу базу данных через Core Data. Вы даже можете использовать этот инструмент для баз данных SQLITE, которые вы обычно создаете через Terminal (это то, что я делаю, когда мне нужно, и когда нет необходимости использовать MS SQL).

7
ответ дан 7 December 2019 в 01:19
поделиться

Вы добавляете данные в объект без связанного настраиваемого подкласса NSManagedObject следующим образом:

NSManagedObject *mo = [NSEntityDescription insertNewObjectForEntityForName:@"MyEntityName"
inManagedObjectContext:aManagedObjectContext];
[mo setValue:aValue forKey:@"aKeyName"];
id aValue=[mo valueForKey:@"aKeyName"];

Core Data не является табличной базой данных. Это система управления графом объектов. Таким образом, вы имеете дело с данными в Core Data, изменяя атрибуты объектов.

В приведенном выше примере я изменяю значение, хранящееся в экземпляре mo , который является универсальным NSManagedObject. Поскольку mo является общим NSManagedObject, я использую setValue: forKey для хранения значения в ассоциативном хранилище NSManagedObject. Имена ключей задаются объектами, которые вы создаете в средстве моделирования данных.

Чаще всего вы должны создать выделенный подкласс NSManagedObject, атрибуты которого являются атрибутами и отношениями объекта. В этом случае приведенный выше код будет выглядеть так:

MyManagedObjectSubclass *myMO = [NSEntityDescription insertNewObjectForEntityForName:@"MyEntity"
inManagedObjectContext:aManagedObjectContext];
myMo.attributeName=aValue;
id anotherValue=myMo.attributeName;

Попытка представить Core Data в терминах SQL приведет только к несчастью. Core Data не работает как SQL. Он работает как очень взаимосвязанный набор настраиваемых объектов. Вы должны думать об объектах для Core Data, а не о таблицах.

3
ответ дан 7 December 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: