мы можем установить первичный ключ в основных данных - PullRequest
4 голосов
/ 17 июня 2011

Я делаю заявление, в котором я использую основные данные.Теперь в этом мне нужно создать первичный ключ, такой же, как мы создаем в sqlite (тип автоинкремента).Возможно ли это с основными данными. Если да, то как с любой ссылкой или предложением, чтобы как поступить с тем же.

С уважением, Mrugen

Ответы [ 4 ]

4 голосов
/ 01 августа 2013

CoreData - это не база данных, а , это решение для реляционного сопоставления объектов .Это слой постоянства объекта.В CoreData отсутствует понятие первичных ключей или внешних ключей.

Если вы хотите установить связь между двумя сущностями.Вы определите отношения, CoreData позаботится о том, как эти отношения хранятся.

enter image description here

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

Выберите объект назначения и определите обратную связь таким же образом.

4 голосов
/ 17 июня 2011

Поскольку базовые данные являются средой персистентности, а не базой данных общего назначения, они абстрагируют первичный ключ.

2 голосов
/ 17 июня 2011

Не могли бы вы просто использовать свойство objectID NSManagedObject? Это даст вам уникальную ссылку на ваш объект.

2 голосов
/ 17 июня 2011

Ответ НЕТ.Для достижения аналогичной цели, вы можете иметь поле 'id' в таблице, прежде чем вставлять в таблицу, получите максимальное значение 'id', а затем добавьте 1 к значению.

с сохраненным 'userID''в таблице ENTITY_USER (пользователи) получить самый высокий идентификатор пользователя.

+ (NSInteger) getMaxUserID
{
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *res = [NSEntityDescription entityForName:ENTITY_USER
                                           inManagedObjectContext:[DataBaseManager sharedInstance].managedObjectContext];
    [request setEntity:res];

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"userID" ascending:NO];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [request setSortDescriptors:sortDescriptors];
    [sortDescriptors release];
    [sortDescriptor release];

    [request setFetchLimit:1];

    NSError *error = nil;
    NSArray *results = [[DataBaseManager sharedInstance].managedObjectContext executeFetchRequest:request error:&error];
    [request release];
    if (results == nil) {
        NSLog(@"error fetching the results: %@",error);
    }

    NSInteger maximumValue = 0;
    if (results.count == 1) {
        CDUser *result = (CDUser *)[results objectAtIndex:0];
        maximumValue =  [result.userID integerValue];
    }
    return maximumValue;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...