繁体   English   中英

如何使KVO观察者和MutableArray信息提供tableview?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM