Hi,
ich arbeite zurzeit gerade wieder an meiner aller ersten App, die ich programmiert habe und füge neue Funktionen hinzu bzw. verbessere den Code. Der Code, den ich jetzt poste ist vlt. etwas schlecht programmiert aber es war wie gesagt meine aller erste App. Deshalb bitte ich um Verständnis und ich überarbeite auch den Code zurzeit. Sachliche Hinweise nehme ich aber gerne an. Nun zu meiner Frage: Ich habe einen TableView und eine Searchbar. In den TableView sind jetzt z.B. 2 Einträge vorhanden. Nun suche ich nach einen Eintrag und dann breche ich es wieder ab und möchte dann wieder alle Einträge sehen. Nur da gibt es leider zwei Probleme:
Was mache ich falsch? Habe ich irgendwas übersehen? Hier mein Code:
Alles anzeigen
Viele Grüße
Nils
ich arbeite zurzeit gerade wieder an meiner aller ersten App, die ich programmiert habe und füge neue Funktionen hinzu bzw. verbessere den Code. Der Code, den ich jetzt poste ist vlt. etwas schlecht programmiert aber es war wie gesagt meine aller erste App. Deshalb bitte ich um Verständnis und ich überarbeite auch den Code zurzeit. Sachliche Hinweise nehme ich aber gerne an. Nun zu meiner Frage: Ich habe einen TableView und eine Searchbar. In den TableView sind jetzt z.B. 2 Einträge vorhanden. Nun suche ich nach einen Eintrag und dann breche ich es wieder ab und möchte dann wieder alle Einträge sehen. Nur da gibt es leider zwei Probleme:
- Das Suchen eines neu hinzugefügten Eintrages funktioniert immer nur nach Neustart der App, obwohl der Eintrag schon längst angezeigt wird
- Wenn ich auf Abrrechen klicke, bekomme ich nicht mehr alle Daten sondern nur noch die, die zurzeit angezeigt werden. Wenn zurzeit keine Angezeigt werden, dann bekomme ich auch keine aus meinen Datenmodell zurück. Obwohl ich nichts am Datenmodell ändere oder so, sind die Daten auf einmal weg. Ich raffe das nicht!!
Was mache ich falsch? Habe ich irgendwas übersehen? Hier mein Code:
Quellcode
- @interface NoticeViewController ()
- @property NSMutableDictionary *noticeData;
- @property Model *model;
- @end
- @implementation NoticeViewController
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
- self.model = delegate.model;
- }
- -(void)viewWillAppear:(BOOL)animated {
- [super viewWillAppear:animated];
- [self updateData];
- NSUbiquitousKeyValueStore *cloudStore = [NSUbiquitousKeyValueStore defaultStore];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateData) name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification object:cloudStore];
- }
- -(void)viewWillDisappear:(BOOL)animated {
- NSUbiquitousKeyValueStore *cloudStore = [NSUbiquitousKeyValueStore defaultStore];
- [[NSNotificationCenter defaultCenter] removeObserver:self name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification object:cloudStore];
- }
- -(void)updateData {
- [self.model synchNotice];
- self.noticeData = [self.model getNotices];
- [self.tableView reloadData];
- }
- ....
- #pragma mark -
- #pragma mark SearchBar Delegate
- - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
- self.noticeData = [self.model getNotices];
- searchBar.text=@"";
- [searchBar setShowsCancelButton:NO animated:YES];
- [searchBar resignFirstResponder];
- self.tableView.allowsSelection = YES;
- self.tableView.scrollEnabled = YES;
- [self.tableView reloadData];
- }
- - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
- if ([self.noticeData objectForKey:@"headers"] != nil) {
- self.tableView.allowsSelection = NO;
- self.tableView.scrollEnabled = NO;
- NSMutableDictionary *searchDictionarry = [[NSMutableDictionary alloc] init];
- NSMutableArray *headers = [self.noticeData objectForKey:@"headers"];
- NSMutableArray *data = [self.noticeData objectForKey:@"data"];
- for (int i = 0; i<data.count; i++) {
- [searchDictionarry setObject:[data objectAtIndex:i] forKey:[headers objectAtIndex:i]];
- }
- NSString *searchText = searchBar.text;
- NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"(SELF beginswith[cd] %@) OR (SELF endswith[cd] %@) OR (SELF contains[cd] %@)", searchText, searchText, searchText];
- NSArray *resultsArray = [headers filteredArrayUsingPredicate:searchPredicate];
- headers = [NSMutableArray arrayWithArray:resultsArray];
- [data removeAllObjects];
- for (int i=0; i<headers.count; i++) {
- [data addObject:[searchDictionarry objectForKey:[headers objectAtIndex:i]]];
- }
- [self.noticeData setObject:headers forKey:@"headers"];
- [self.noticeData setObject:data forKey:@"data"];
- [self.tableView reloadData];
- [searchBar resignFirstResponder];
- self.tableView.allowsSelection = YES;
- self.tableView.scrollEnabled = YES;
- }
- }
Viele Grüße
Nils
