Как вставить отдельные записи через основные данные в iPhone? - PullRequest
3 голосов
/ 15 сентября 2011

Я хочу вставить только те записи в основных данных в iPhone, которых еще нет в таблице sqllite.Другими словами, я хочу вставить отдельные записи в мою таблицу основных данных.Мой код вставки:

for(NSInteger j=0;j<[items count];j++){
            Story *story=(Story *)[NSEntityDescription insertNewObjectForEntityForName:@"Story" inManagedObjectContext:managedObjectContext];

            [story setTitle:[[items objectAtIndex:j] objectForKey:@"title"]];
            [story setDate:[[items objectAtIndex:j] objectForKey:@"date"]];
     }

Подскажите, как вставить в эту запись только отдельные записи.

Ответы [ 2 ]

5 голосов
/ 15 сентября 2011

Посмотрите на на этой странице , в разделе «Реализация поиска или создания эффективно» дается подробная информация о том, как реализовать механизм обновления / вставки.

3 голосов
/ 15 сентября 2011

Одним из решений может быть присвоение вашей сущности атрибута index (просто целочисленное значение) и проверка этого перед добавлением новой сущности.

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

NSString *title = [[items objectAtIndex:i] objectForKey:@"title"];
NSDate *date = [[items objectAtIndex:i] objectForKey:@"date"];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Story" inManagedObjectContext:managedObjectContext];

// Create the predicates to check for that title & date.
NSString *predTitleString = [NSString stringWithFormat:@"%@ == %%@", @"title"];
NSString *predDateString = [NSString stringWithFormat:@"%@ == %%@", @"date"];

NSPredicate *predTitle = [NSPredicate predicateWithFormat:predTitleString, @"title"];
NSPredicate *predDate = [NSPredicate predicateWithFormat:predDateString, @date];

NSArray *predArray = [NSArray arrayWithObjects:predTitle, predDate, nil];
NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:predArray];

// Create the fetch request.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];
[fetchRequest setPredicate:predicate];

// Fetch results.
NSError *error = nil;
NSArray *array = [context executeFetchRequest:fetchRequest error:&error];

// If no objects returned, a story with this title & date does not yet exist in the model, so add it.
if ([array count] == 0) {
    Story *story=(Story *)[NSEntityDescription insertNewObjectForEntityForName:@"Story" inManagedObjectContext:managedObjectContext];

    [story setTitle:title];
    [story setDate:date];
}

[fetchRequest release];

Мне показалось очень полезным реализовать вспомогательный класс, содержащий универсальные методы для выполнения этих выборок, поэтому все, что вам нужно сделать, это сообщить ему имя вашей сущности., словарь ключей и значений для проверки и контекст для поиска. Сохраняет переписывание большого количества кода!

Надеюсь, это поможет.

...