Objective c 使用NSUserDefaults在主视图控制器上保存数据的Xcode

Objective c 使用NSUserDefaults在主视图控制器上保存数据的Xcode,objective-c,xcode,uitableview,nsuserdefaults,Objective C,Xcode,Uitableview,Nsuserdefaults,我正在为ipad创建一个master detail应用程序,它应该在master view controller中的table view cel中保存用户正在键入的内容(使用popover视图上的按钮,在popover视图的标签上放置一些文本) 所以基本上我有一个popover视图,它包含一个名为inputDisplayLabel的UILabel,以及用户按下的任何按钮,按钮文本进入该UILabel。按下enter按钮时,会将该文本添加到tableviews cel中。现在我想保存该表视图中的内

我正在为ipad创建一个master detail应用程序,它应该在master view controller中的table view cel中保存用户正在键入的内容(使用popover视图上的按钮,在popover视图的标签上放置一些文本)

所以基本上我有一个popover视图,它包含一个名为inputDisplayLabel的UILabel,以及用户按下的任何按钮,按钮文本进入该UILabel。按下enter按钮时,会将该文本添加到tableviews cel中。现在我想保存该表视图中的内容,这样当我退出应用程序并重新开始时,文本仍然保留在tableview cel中

我尝试添加一个名为SaveValue的按钮,并将其编码为:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:self.inputDisplayLabel.text forKey:@"savedValue"];
[defaults synchronize];
现在,我尝试通过添加另一个名为loadValue的按钮加载它,代码如下:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
self.tableView = [defaults objectForKey:@"SavedValue"];
但它不起作用。我应该把加载代码放在哪里,这样当应用程序启动时它就在那里,这样我就不必再使用其他按钮了

我希望有人能帮助我。谢谢

编辑:

-(void)setTheTextOfLabelWith:(NSString *)str
{
    text = str;
    if (!_objects) {
        _objects = [[NSMutableArray alloc] init];
    }
    //[_objects insertObject:[NSDate date] atIndex:0];
    [_objects insertObject:[[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, self.view.frame.size.width, self.view.frame.size.height)] atIndex:0];
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    [self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];


    [self.inputViewPopover dismissPopoverAnimated:YES];
}

目标C是区分大小写的“savedValue”与“savedValue”不同。当然,tableview不能直接获取字符串。必须将字符串/文本指定给tableviewcell中的标签等。 将代码放在viewDidLoad中,因此在那里设置标签的文本,如果它在tableViewCell中,则必须在“CellForRowatineXpath”方法中设置它。也许应该看看viewcontroller生命周期以及UITableViewDelegate和数据源协议

//编辑: 我不这么认为。。基本上,您有一个动态的tableview,希望多个单元格显示您在用户默认设置中保存的一些文本? 要拥有动态tableview,通常在ViewController中实现UITableViewDataSource和UITableViewDelegate协议,后者显示/管理tableview。在这里,您可以使用UITableViewDataSource协议中的“CellForRowatineXpath”方法创建单元格。由于要保存多个条目,可以使用数组以用户默认值保存所有内容,然后在cellForRow中迭代。。获取单元格中的所有文本

例如

如果您想保存大量数据,请考虑使用CoreData或某种XML来保存数据,因为用户默认值通常用于保存某种设置(但对于某些“文本”,应该完全可以)

//编辑2: 签出项目后,我注意到您试图将标签保存在NSUserDefaults中,这是不可能的。您必须保存这些标签的文本,然后在从NSUserDefaults加载后用这些文本还原标签。 最简单的解决方案(或者至少是没有多次修改的解决方案)是修改加载和保存方法,如下所示:

- (IBAction)load
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    NSArray *texts = [defaults objectForKey:@"items"];
    for(NSString *currentText in texts)
    {
        [self setTheTextOfLabelWith:currentText];
    }
}

- (void)savingData
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    NSMutableArray *textToSave = [[NSMutableArray alloc] init];
    for(UILabel *currentLabel in _objects)
    {
        [textToSave addObject:currentLabel.text];
    }

    [defaults setObject:textToSave forKey:@"items"]; 
    [defaults synchronize];
}

您也可以在回复邮件时找到该解决方案。

感谢您的快速回复,谢谢!我试着在屏幕上的某个地方添加一个标签来进行测试,它起了作用,但我真的很想让它与tableviews cel一起工作。你能帮我吗?看我编辑的答案。看看:我编辑了代码,这就是你的意思吗?setTheTextFlabelWith接受字符串的参数,每当用户按下add按钮时,它就会将该参数添加到tableview cel中。然后我想使用NSUserDefaults保存这些单元格。谢谢您的快速回复!我有没有办法把我的项目发给你,这样你就可以更容易地理解它?我不知道如何解释,但如果你检查一下,你就会明白我的意思,把它寄给我就行了darkdevilx@gmx.net:-)那么我来看看。
- (IBAction)load
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    NSArray *texts = [defaults objectForKey:@"items"];
    for(NSString *currentText in texts)
    {
        [self setTheTextOfLabelWith:currentText];
    }
}

- (void)savingData
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    NSMutableArray *textToSave = [[NSMutableArray alloc] init];
    for(UILabel *currentLabel in _objects)
    {
        [textToSave addObject:currentLabel.text];
    }

    [defaults setObject:textToSave forKey:@"items"]; 
    [defaults synchronize];
}