0

我在VC中有textview。使用 nsuserdefaults 保存此文本视图并稍后获取。在 VC1 中,我得到保存的 textview 并在 UITableView 中显示。但是当我启动应用程序时,它会自动在索引 0 中显示“null”文本。

风险投资:

-(void)save:(id)sender{

   NSUserDefaults *userData1 = [NSUserDefaults standardUserDefaults];
    [userData1 setObject:textView.text forKey:@"savetext"];
    [userData1 synchronize];
}

VC1:

-(void) viewWillAppear:(BOOL)animated{

    [super viewWillAppear:animated];

     // textArray=[[NSMutableArray alloc]init];

    txt=[[UITextView alloc]initWithFrame:CGRectMake(0, 0, 320, 400)];

    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    // getting an NSString
     NSString *savedValue = [prefs stringForKey:@"savetext"];

    NSLog(@"saved is %@",savedValue);

    txt.text = [NSString stringWithFormat:@"%@", savedValue];

    NSLog(@"text.txt is %@", txt.text);

    MyAppDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

  if(![MyAppDelegate.textArray containsObject:txt.text]){
        [MyAppDelegate.textArray addObject:txt.text];
    }

   NSUserDefaults *userData1 = [NSUserDefaults standardUserDefaults];
    [userData1 setObject:MyAppDelegate.textArray forKey:@"save"];
    [userData1 synchronize];

}

UITableView 使用数组显示文本值:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    NSMutableArray* myMutableArrayAgain = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"save"]];

     NSLog(@"array is %@",myMutableArrayAgain);

     return [myMutableArrayAgain count];

  }


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSMutableArray* myMutableArrayAgain = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"save"]];

    NSLog(@"mycell is %@",myMutableArrayAgain);

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    NSLog(@"cell is %@",cell);

    if (cell == nil) {

        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];

        NSLog(@"cell inside is %@",cell);

    }

 // Configure the cell...
    cell.textLabel.text = [myMutableArrayAgain objectAtIndex:indexPath.row];
    [cell.textLabel setFont:[UIFont fontWithName:@"Arial-BoldMT" size:14]];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    return cell;

}

在此处输入图像描述

4

1 回答 1

0

这都是因为代码在某些地方是错误的:

1)带有数组的 Nsmutable 数组是错误的:- 因为 userdefaults 正在返回一个字符串。所以这样做: -

 NSUserDefaults *userData1 = [NSUserDefaults standardUserDefaults];
    NSMutableArray* myMutableArrayAgain = [NSMutableArray arrayWithObject:[userData1 valueForKey:@"savetext"]];

2)在 VC 中,您将键的值保存在“savetext”中,但在 VC1 中,您将值检索为“save”,所以更改它,它已在上面的代码中完成。

// 以上两点可以解决您的问题,但我会说不要这样编码,因为它会消耗更多内存并会消除代码的整洁性。您所做的代码可以以非常有效的方式完成。我告诉你 。

// 获取第一个视图控制器 VC 并将 IBAction 添加到按钮和 textView 或 textField 中。在 VC 中编写此代码:-

.h 文件

@interface demoViewController : UIViewController{
    IBOutlet UITextField *txt1;
}

-(IBAction)getData:(id)sender;

.m 文件

// 首先包含下一个你想要重定向的控制器的头文件,假设 XYZ

#import XYZ.h

-(IBAction)getData:(id)sender{
    NSUserDefaults *userData1 = [NSUserDefaults standardUserDefaults];
    [userData1 setObject:txt1.text forKey:@"savetext"];
    demoViewController1 *demo=[[demoViewController1 alloc]initWithNibName:@"demoViewController1" bundle:nil];
    [self.navigationController pushViewController:demo animated:NO];
}

// 在 ViewDisLoad 或 ViewDidAppear 上使用第二个控制器,随心所欲

// 取一个全局 MuttableArray

NSMutableArray *myMutableArrayAgain;

// 我在 ViewDidload 上写了这段代码 在这里分配数组,因为 MutableObject 需要分配

 NSUserDefaults *userData1 = [NSUserDefaults standardUserDefaults];
    myMutableArrayAgain=[[NSMutableArray alloc]init];
    [myMutableArrayAgain addObject: [userData1 valueForKey:@"savetext"]];

// 现在表格视图方法

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return [myMutableArrayAgain count];

}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    NSLog(@"cell is %@",cell);

    if (cell == nil) {

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

        NSLog(@"cell inside is %@",cell);    
    }

    // Configure the cell...
    cell.textLabel.text = [myMutableArrayAgain objectAtIndex:indexPath.row];
    [cell.textLabel setFont:[UIFont fontWithName:@"Arial-BoldMT" size:14]];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    return cell;
}

// 应用这种方式,您可以用更少的代码以一种很好的方式完成这些工作。

于 2013-10-08T07:10:55.117 回答