0

我在 ViewController 中有 UITextView。我将 textView 传递给 viewcontroller1 UITableView。我使用 NSUserDefaults 来存储和检索文本。在 viewcontroller1 中,UITebleView 不会随着更新文本而增加,它只替换第一行中的旧文本。

视图控制器:

-(void)save:(id)sender{

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

视图控制器1:

     -(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"];

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

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


   // [MyAppDelegate.textArray addObject:txt.text];

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

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

    [self.view addSubview:txt];


        }

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


  //  NSLog(@"textArray count is %d",[MyAppDelegate.textArray count]);

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

    return [myMutableArrayAgain count];

}




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


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


    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView1 dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {

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

    }

    // 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

3 回答 3

2

在你的声明你的数组对象Appdelegate.h

@property (nonatomic, retain)  NSMutableArray *textArray;

Appdelegate.m在你的indidFinishLaunchingWithOptions方法中分配这个数组对象

NSMutableArray *array = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"save"]];
if(array)
{
self.textArray = array;
}
else
{
        self.textArray=[[NSMutableArray alloc]init];    
}

导入Appdelegate.h文件ViewController1.h并声明

AppDelegate *appdelegate;

ViewController1.m在文件中的代码中更改以下方法

- (void)viewDidLoad
{
    [super viewDidLoad];

 tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 568)                                           style:UITableViewStylePlain];
        NSLog(@"Scrolling");

        tableView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin |
        UIViewAutoresizingFlexibleWidth |
        UIViewAutoresizingFlexibleRightMargin;

        //  tableView.contentInset = UIEdgeInsetsMake(0, 0,300, 0); //values passed are - top, left, bottom, right
        tableView.delegate = self;
        tableView.dataSource = self;
        [tableView reloadData];

        tableView.contentInset = UIEdgeInsetsMake(0, 0,300, 0);


        //self.view = tableView;
        [self.view addSubview:tableView];


}

-(void) viewWillAppear:(BOOL)animated{

        [super viewWillAppear:animated];

        NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
        // getting an NSString

        NSString *savedValue = [prefs stringForKey:@"savetext"];    

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

        appdelegate = [[UIApplication sharedApplication] delegate];
         if(![appdelegate.textArray containsObject:savedValue]){
             [appdelegate.textArray addObject:savedValue];
         }




    }

改变以下2种方法

  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        return [appdelegate.textArray count];

        NSLog(@"textArray count is %d",[textArray count]);
    }

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

        static NSString *CellIdentifier = @"Cell";

        UITableViewCell *cell = [tableView1 dequeueReusableCellWithIdentifier:CellIdentifier];

        if (cell == nil) {

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

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

        return cell;
    }
于 2013-10-07T04:57:47.953 回答
0

只需分配 yourarray 和 table inViewDidLoad而不是ViewWillAppear

tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 568)                                           style:UITableViewStylePlain];

    textArray=[[NSMutableArray alloc]init];    
于 2013-10-07T05:13:50.290 回答
0

我理解你的要求。当 viewWillAppear 出现时,您想将对象添加到现有数组中。但是每当调用viewWillAppear时,您都在初始化数组。这就是为什么你每次只能得到一个对象。为此,您必须维护一个单例类并将对象添加到 viewWillAppear 中的数组中。

你必须看看这个:

http://www.galloway.me.uk/tutorials/singleton-classes/

于 2013-10-07T04:39:30.320 回答