выбор конкретного предиката из базы данных - PullRequest
0 голосов
/ 12 августа 2011

У меня есть 4 базы данных CoreData. Каждый на самом деле имеет свою ценность. Но это слишком тяжело, и я хотел бы уменьшить его до 1 базы данных. Поэтому каждый раз, когда я хочу получить информацию из базы данных, я могу выбрать, что извлечь. Мне нужно использовать NSPredicate, чтобы установить строку, которую я хочу вытащить иззит?

Могу ли я установить свой NSPredicate следующим образом?

NSString *value = @"Food";
NSString *wildcardedString = [NSString stringWithFormat:@"%@*", value];
[[NSPredicate predicateWithFormat:@"ANY places.type like %@", wildcardedString];

и как мне связать NSPredicate с последовательностью запроса выборки?

это мой загруженныйРезультатыКонтроллер

- (NSFetchedResultsController *)fetchedResultsController {
    if (fetchedResultsController != nil) 
    {
        return fetchedResultsController;
    }

    CoreDataMelakaAppDelegate *appDelegate = (CoreDataMelakaAppDelegate *)[[UIApplication sharedApplication] delegate];
    NSManagedObjectContext *context = [appDelegate managedObjectContext];
    NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
    [fetchRequest setEntity:[NSEntityDescription entityForName:@"WhereTo" inManagedObjectContext:context]];
    NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES] autorelease];
    NSArray *sortDescriptors = [[[NSArray alloc] initWithObjects:sortDescriptor, nil] autorelease];
    [fetchRequest setSortDescriptors:sortDescriptors];
   // NSPredicate *pred = [NSPredicate predicateWithFormat:@"(name = %@)", wher.name];
    //[fetchRequest setPredicate:pred];
    NSString *value = @"Nasi";
    NSString *wildcardedString = [NSString stringWithFormat:@"%@*", value];
    [[NSPredicate predicateWithFormat:@"ANY wher.name like %@", wildcardedString];
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:@"Root"];
    aFetchedResultsController.delegate = self;
    self.fetchedResultsController = aFetchedResultsController;
    [aFetchedResultsController release];
    return fetchedResultsController;
}  

1 Ответ

1 голос
/ 12 августа 2011

Когда вы изменяете предикат запроса на выборку, используемого контроллером извлеченных результатов (FRC), вы должны создать новый контроллер извлеченных результатов.

Ваш код логичен, но он только один раз создает FRC с предикатом, который компилируется в:

ANY wher.name like Nasi*

... каждый раз, когда FRC выполняет выборку, он использует этот точный предикат.

Если вы хотите использовать гибкий предикат, вам нужно будет создавать новый FRC каждый раз, когда вы изменяете предикат.

...