10

Czytałem inne posty na temat tej awarii, które mają coś wspólnego z predykatem, który zwrócił zero, ale nie jestem w stanie tego rozgryźć z moją aplikacją. Czy ktoś mógłby mi z tym pomóc?NSInvalidArgumentException ', powód: "Nieprawidłowy predykat: zero RHS, potrzebuję pomocy w ustaleniu tego na zewnątrz

static NSString *const KJMWorkoutCategorySectionKeyPath = @"workoutCategory"; 

- (NSFetchedResultsController *)fetchedResultsControllerWithSearchString:(NSString *)searchString { 
    NSManagedObjectContext *sharedContext; // my NSManagedObjectContext instance... 

    NSFetchRequest *request = [NSFetchRequest new]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Workouts" 
               inManagedObjectContext:sharedContext]; 
    request.entity = entity; 
    request.predicate = [NSPredicate predicateWithFormat:@"(workoutName CONTAINS[cd] %@)", searchString]; 

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:KJMWorkoutCategorySectionKeyPath ascending:YES]; 
    request.sortDescriptors = @[sortDescriptor]; 

    NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request 
                           managedObjectContext:sharedContext 
                           sectionNameKeyPath:KJMWorkoutCategorySectionKeyPath 
                              cacheName:nil]; 
    fetchedResultsController.delegate = self; 

    NSError *error = nil; 

    if (![fetchedResultsController performFetch:&error]) { 
     NSLog(@"Unresolved error %@, %@", error, error.userInfo); 
     abort(); 
    } 

    return fetchedResultsController; 
} 
+0

Awaria następuje na linii 'predicateWithFormat' lub' set " Linia orzecznicza? –

+0

ulega awarii dokładnie w następującej linii: 'if (! [AFetchedResultsController performFetch: & error])' – kevnm67

Odpowiedz

21

komunikat o błędzie wskazuje, że searchString jest nil w

NSPredicate *filterPredicate = [NSPredicate 
      predicateWithFormat:@"(workoutName CONTAINS[cd] %@)", searchString]; 

Jeżeli intencją jest, aby wyświetlić wszystkie obiektów, jeśli nie ciąg wyszukiwania jest podana, należy prostu nie przypisywać predykat do żądanie pobierania w takim przypadku:

if ([searchString length] > 0) { 
    NSPredicate *filterPredicate = [NSPredicate 
      predicateWithFormat:@"(workoutName CONTAINS[cd] %@)", searchString]; 
    [request setPredicate:filterPredicate]; 
} 
+1

Dziękuję Martin! To wydawało się działać. – kevnm67

+1

@ kevnm67: Nie ma za co! –

Powiązane problemy