[英]How to make a KVO observer and feed tableview with MutableArray info?
我有一个问题,我是iPhone编程的入门者,我不知道该怎么做。 我必须让KVO观察者知道何时文本字段正在接收字符串,并使用动画将这些字符串显示到表格视图中,我已经从文本字段中获得了字符串数组,但是我不知道如何将其显示到表格视图中。 因此,有人的帮助将不胜感激!!
这是我的代码:
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
if (!self.tasks) self.tasks = [NSMutableArray new];
[self.tasks addObject:textField.text];
[userDefaults setObject:self.tasks forKey:@"tasks"];
NSLog(@"tasks:%@", [[NSUserDefaults standardUserDefaults]objectForKey:@"tasks"]);
NSLog(@"number of tasks:%d", self.tasks.count); <-- this print works good, also the first one
[textField addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:NULL];
[textField resignFirstResponder];
return YES;
}
并且在tableviewcontroller中,我只有这个(用于测试,但它不起作用:():
[self viewdidload];
if (!self.TasksArray) self.TasksArray = [NSMutableArray new];
self.TasksArray = [[NSUserDefaults standardUserDefaults]objectForKey:@"tasks"];
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSLog(@"number of tasks when tableview:%d", self.TasksArray.count);
//return self.TasksArray.count;
return self.TasksArray.count;
}
将对象设置为[NSUserDefaults standardUserDefaults]
确保您调用[NSUserDefaults standardUserDefaults] synchronize];
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
if (!self.tasks) self.tasks = [NSMutableArray new];
[self.tasks addObject:textField.text];
[userDefaults setObject:self.tasks forKey:@"tasks"];
[userDefaults synchronize];
NSLog(@"tasks:%@", [[NSUserDefaults standardUserDefaults]objectForKey:@"tasks"]);
NSLog(@"number of tasks:%d", self.tasks.count); <-- this print works good, also the first one
[textField addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:NULL];
[textField resignFirstResponder];
return YES;
}
您可能还需要调用[self.tableView reloadData]
您从指定的对象之后[NSUserDefaults standardUserDefaults]
到self.TasksArray
。
- (void)viewDidLoad
{
[super viewDidload];
if (!self.TasksArray) self.TasksArray = [NSMutableArray new];
self.TasksArray = [[NSUserDefaults standardUserDefaults]objectForKey:@"tasks"];
[self.tableView reloadData];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSLog(@"number of tasks when tableview:%d", self.TasksArray.count);
return self.TasksArray.count;
}
根据您的应用程序体系结构,最好在viewWillAppear:(BOOL)animated
调用[self.tableView reloadData]
尝试下面的代码..与textFieldDidEditing。
- (void)textFieldDidEndEditing:(UITextField *)textField
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
if (!self.tasks) self.tasks = [NSMutableArray new];
[self.tasks addObject:textField.text];
[userDefaults setObject:self.tasks forKey:@"tasks"];
[userDefaults synchronize];
NSLog(@"tasks:%@", [[NSUserDefaults standardUserDefaults]objectForKey:@"tasks"]);
NSLog(@"number of tasks:%d", self.tasks.count); <-- this print works good, also the first one
[textField addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:NULL];
[textField resignFirstResponder];
[self.yourtableview reloadData];
}
希望对您有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.