10

Ho letto altri post su questo crash che hanno qualcosa a che fare con il predicato che ritorna nil ma non riesco a capirlo con la mia app. Qualcuno può aiutarmi per favore con questo?NSInvalidArgumentException ', motivo:' predicato non valido: nil RHS, ho bisogno di aiuto a capire questo

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

Si blocca sulla riga 'predicateWithFormat', o' set Linea Predicate'? –

+0

si blocca esattamente nella riga seguente: 'if (! [AFetchedResultsController performFetch: & error])' – kevnm67

risposta

21

Il messaggio di errore indica che searchString è nil in

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

Se l'intenzione è quella di visualizzare tutti oggetti se non viene dato testo da cercare, si dovrebbe solo non si assegna un predicato al richiesta di recupero in questo caso:

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

Grazie, Martin! Sembrava funzionare. – kevnm67

+1

@ kevnm67: prego! –