Hallo liebe Entwicklergemeinde,
nachdem ich sehr gute Erfahrungen in diesem Forum sammeln konnte, wende ich mich erneut verzweifelt an euch und bitte euch um Hilfe....
Ich versuche aktuell eine Art AutoComplete Funktion für meine App zu erstellen. Diese greift auf eine CoreData Datenbank zu um die Daten mit dem Key "flag" auszulesen und zu vergleichen. Dies klappt auch soweit ganz gut...
Leider wird mir aber bei der Änderung der Wert in meinem CoreData Model ordentlich gespeichert, aber in der AutoCompleteTabelle werden noch die alten Daten angezeigt!? Beende ich die App oder gehe nur kurz aus ihr aus, werden die Daten wieder richtig angezeigt!?
Hier die Action für das Textfeld in dem ich die Daten aus Core Data abrufe und vergleiche:
Alles anzeigen
Hier der Code für die Anzeige in der Tabelle:
Alles anzeigen
In der Funktion viewDidLoad wird die Tabelle wie folgt erzeugt:
Da ich selber kein prof. Entwickler bin, das ganze mir selber als Hobby beigebracht habe, bitte ich ggf. falsche Formulierungen zu entschuldigen. Ich vermute das mein Problem daran liegt, wie ich die Daten in der Action aus CoreData abfrage! Allerdings finde ich keinen Fehler, was ja nicht heißt das dieser nicht doch vorhanden ist
Für einen Denkanstoß oder eine Hilfe wäre ich sehr dankbar. Ich konnte von euch schon viel lernen, vielleicht ja auch diesesmal wieder ...!?
Danke im vorraus...
Dirk
nachdem ich sehr gute Erfahrungen in diesem Forum sammeln konnte, wende ich mich erneut verzweifelt an euch und bitte euch um Hilfe....
Ich versuche aktuell eine Art AutoComplete Funktion für meine App zu erstellen. Diese greift auf eine CoreData Datenbank zu um die Daten mit dem Key "flag" auszulesen und zu vergleichen. Dies klappt auch soweit ganz gut...
Leider wird mir aber bei der Änderung der Wert in meinem CoreData Model ordentlich gespeichert, aber in der AutoCompleteTabelle werden noch die alten Daten angezeigt!? Beende ich die App oder gehe nur kurz aus ihr aus, werden die Daten wieder richtig angezeigt!?
Hier die Action für das Textfeld in dem ich die Daten aus Core Data abrufe und vergleiche:
Quellcode
- - (IBAction)autoComplete:(id)sender {
- if (editingFlag) {
- //autocompleteTableView.hidden = YES;
- [self.view addSubview:autocompleteTableView];
- NSLog(@"editingFlag gesetzt, --> autoComplete Action");
- AppDelegate *del = [[UIApplication sharedApplication] delegate];
- NSManagedObjectContext *moc = [del managedObjectContext];
- NSEntityDescription *entity = [NSEntityDescription entityForName:@"LearningObjects" inManagedObjectContext:moc];
- NSFetchRequest *fr = [[NSFetchRequest alloc] init];
- [fr setEntity:entity];
- NSPredicate *predicate = [NSPredicate predicateWithFormat:@"flag beginswith[code=c] %@",textField.text];
- [fr setPredicate:predicate];
- NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"flag" ascending:YES];
- NSMutableArray *sortDescriptors = [[NSMutableArray alloc] initWithObjects:sortDescriptor, nil];
- [fr setSortDescriptors:sortDescriptors];
- [fr setResultType:NSDictionaryResultType];
- [fr setPropertiesToFetch:[NSArray arrayWithObject:@"flag"]];
- fr.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"flag" ascending:YES]];
- [fr setReturnsDistinctResults:YES];
- NSLog(@"Objekte im fetch request: %@", fr);
- NSError *error = nil;
- globalesArray = [[moc executeFetchRequest:fr error:&error] mutableCopy];
- NSLog(@"Objekte im Array - autoComplete Action: %@",globalesArray);
- [autocompleteTableView reloadData];
- [sortDescriptor release];
- [sortDescriptors release];
- [fr release];
- }
- else {
- NSLog(@"editingFlag nicht gesetzt, --> autoComplete Action");
- }
- }
Hier der Code für die Anzeige in der Tabelle:
Quellcode
- #pragma mark UITableViewDataSource methods
- - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger) section {
- if (globalesArray.count == 0) {
- if (self.autocompleteTableView.alpha != 0.0) {
- NSLog(@"TableView FadeOut in tableView numberOfRowsInSection:");
- [UIView beginAnimations:@"FadeOut" context:nil];
- [UIView setAnimationDuration:0.0];
- //self.autocompleteTableView.transform = CGAffineTransformMakeTranslation(0, 500);
- self.autocompleteTableView.alpha = 1.0;
- [UIView setAnimationDuration:1.0];
- self.autocompleteTableView.alpha = 0.0;
- //self.autocompleteTableView.transform = CGAffineTransformMakeTranslation(0, 0);
- [UIView commitAnimations];
- autocompleteTableView.hidden = NO;
- }
- }
- else {
- if (self.autocompleteTableView.alpha != 1.0) {
- NSLog(@"TableView FadeIn in tableView numberOfRowsInSection:");
- [UIView beginAnimations:@"FadeIn" context:nil];
- [UIView setAnimationDuration:0.0];
- //self.autocompleteTableView.transform = CGAffineTransformMakeTranslation(0, 500);
- self.autocompleteTableView.alpha = 0.0;
- [UIView setAnimationDuration:1.0];
- self.autocompleteTableView.alpha = 1.0;
- //self.autocompleteTableView.transform = CGAffineTransformMakeTranslation(0, 0);
- [UIView commitAnimations];
- autocompleteTableView.hidden = NO;
- }
- }
- NSLog(@"Was steht in tableView - numberOfRowsInSection drin: %i",globalesArray.count);
- return globalesArray.count;
- }
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
- static NSString *CellIdentifier = @"Cell";
- UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
- if (cell == nil) {
- cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
- }
- // Configure the cell.
- [self configureCell:cell atIndexPath:indexPath];
- if (cell.textLabel.text == textField.text) {
- NSLog(@"TableView FadeOut in configureCell");
- [UIView beginAnimations:@"FadeOut" context:nil];
- [UIView setAnimationDuration:0.0];
- //self.autocompleteTableView.transform = CGAffineTransformMakeTranslation(0, 500);
- self.autocompleteTableView.alpha = 1.0;
- [UIView setAnimationDuration:1.0];
- self.autocompleteTableView.alpha = 0.0;
- //self.autocompleteTableView.transform = CGAffineTransformMakeTranslation(0, 0);
- [UIView commitAnimations];
- autocompleteTableView.hidden = NO;
- }
- return cell;
- }
- - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
- return @"Bisher verwendete Markierungen:";
- }
- #pragma mark UITableViewDelegate methods
- - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
- NSDictionary *item = [globalesArray objectAtIndex:indexPath.row];
- NSLog(@"item itemtext = %@", [item objectForKey:@"flag"]);
- textField.text = [item objectForKey:@"flag"];
- NSLog(@"TableView FadeOut in tableView numberOfRowsInSection:");
- [UIView beginAnimations:@"FadeOut" context:nil];
- [UIView setAnimationDuration:0.0];
- //self.autocompleteTableView.transform = CGAffineTransformMakeTranslation(0, 500);
- self.autocompleteTableView.alpha = 1.0;
- [UIView setAnimationDuration:1.0];
- self.autocompleteTableView.alpha = 0.0;
- //self.autocompleteTableView.transform = CGAffineTransformMakeTranslation(0, 0);
- [UIView commitAnimations];
- autocompleteTableView.hidden = NO;
- }
- - (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
- NSLog(@"Was steht in configureCell im globalesArray: %@", globalesArray);
- NSDictionary *item = [globalesArray objectAtIndex:indexPath.row];
- NSLog(@"item itemtext = %@", [item objectForKey:@"flag"]);
- cell.textLabel.text = [item objectForKey:@"flag"];
- }
In der Funktion viewDidLoad wird die Tabelle wie folgt erzeugt:
Da ich selber kein prof. Entwickler bin, das ganze mir selber als Hobby beigebracht habe, bitte ich ggf. falsche Formulierungen zu entschuldigen. Ich vermute das mein Problem daran liegt, wie ich die Daten in der Action aus CoreData abfrage! Allerdings finde ich keinen Fehler, was ja nicht heißt das dieser nicht doch vorhanden ist
Für einen Denkanstoß oder eine Hilfe wäre ich sehr dankbar. Ich konnte von euch schon viel lernen, vielleicht ja auch diesesmal wieder ...!?
Danke im vorraus...
Dirk