Общий метод, который проверяет существование сущности в базе данных Core Data - PullRequest
1 голос
/ 23 мая 2011

Я хочу написать общий метод, который проверяет, находится ли данный объект в базе данных Core Data.Я хотел бы иметь один метод, который работает для всех лиц.Я придумал что-то вроде этого:

-(BOOL)checkIfExistsEntity:(NSString *)entityName withFieldName:(NSString *)fieldName andFieldValue:(NSString *)value{

    NSManagedObjectContext *managedObjectContext  = [(FGuideAppDelegate *) [[UIApplication sharedApplication] delegate] managedObjectContext];

    NSEntityDescription *selectEntityDescription = [NSEntityDescription
                                                    entityForName:entityName inManagedObjectContext:managedObjectContext];
    NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
    [fetchRequest setEntity:selectEntityDescription];

    NSPredicate *whereForFetch = [NSPredicate predicateWithFormat:@"%@ = %@",fieldName, value];
    [fetchRequest setPredicate:whereForFetch];

    NSError *error = nil;
    NSArray *array = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
    if (array != nil && [array count] > 0){
        return YES;
    }else {
        return NO;
    }
}

Однако похоже, что строка @"%@ = %@" в написанном мной предикате не анализируется должным образом.Есть ли способ реализовать описанную функциональность без жесткого определения свойств объектов в предикате?

Ответы [ 3 ]

3 голосов
/ 23 мая 2011

Проверьте имена динамических свойств по ссылке ниже. http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/Articles/pCreating.html

Вместо %@ использование %K должно решить вашу проблему

0 голосов
/ 23 мая 2011

Вы можете использовать метод countForFetchRequest.

0 голосов
/ 23 мая 2011

тебе нужно == не = (думаю ....)

...