ios - 我怎样才能交替 View Controller 而不丢失数据

标签 ios objective-c uitableview

我有两个 UIViewController,一个是 UIPickerViewController,另一个是 UITableViewController。理想情况下,Picker 应该收到用户的请求,将 x 数量的项目添加到 tableView。 Picker 获取用户输入并将它们分配给变量 val1、val2、val3,其中 val1 是项目数(行数),val2 是项目的名称或标签。

PickerViewController.m

- (IBAction)add:(id)sender
{

   TableViewController *tvc = [[TableViewController alloc] init];

    [tvc setValues:self.val1 :self.val2 :self.val3];
    [self presentViewController:tvc animated:YES completion:nil];
}

TableViewController.m

-(void)setValues:(NSString *)newVal1 :(NSString *)newVal2 :(NSString *)newVal3
{
    self.val1 = newVal1;
    self.val2 = newVal2;
    self.val3 = newVal3;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"UITableViewCell"];

    // This is just a header which holds my "Add" button
    UIView *header = self.headerView;
    [self.tableView setTableHeaderView:header];

    [self addNew:self.val1 :self.val2 :self.val3];

}

- (void)addNew:(NSString *)newVal1 :(NSString *)newVal2 :(NSString *)newVal3
{  
    if(!self.numberOfRows){
        NSLog(@"Initially no of rows = %d", self.numberOfRows);
        self.numberOfRows = [self.val1 intValue];
        NSLog(@"Then no of rows = %d", self.numberOfRows);
    }
    else
    {
        self.numberOfRows = self.numberOfRows + [newVal1 intValue];
        NSLog(@"New no rows = %d", self.numberOfRows);
    }

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.numberOfRows inSection:0];

    // Only run when called again .. not initially
    if(self.run != 0){

        [self.tableView beginUpdates];
        [self.tableView insertRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationBottom];
        self.run ++;
        [self.tableView endUpdates];
    }   
}

// "ADD" button which should go back to the picker and get new items to add to the table
- (IBAction)testAdd:(id)sender
{
    PickerViewController *pvc = [[PickerViewController alloc] init];
    [self presentViewController:pvc animated:YES completion:nil];

}

现在,我意识到每次调用下一个 View Controller 时我都在创建它的一个新实例,但我不知道该怎么做,我认为这是主要问题。截至目前,我希望当我离开选择器 View 的 TableView 并返回时,控制台应该记录“新的行数 = x”,但这并没有发生。

我知道没有使用 val3,我的 addNew: 可能不是最好的,但我只需要它来处理上面提到的基本日志记录,我应该可以从那里获取它。

卡在这几天了

最佳答案

为 TableViewController 创建一个属性,并且只在第一次呈现时创建它,

- (IBAction)add:(id)sender {
    if (! self.tvc) {
    self.tvc = [[TableViewController alloc] init];
    }
    [self.tvc setValues:self.val1 :self.val2 :self.val3];
    [self presentViewController:self.tvc animated:YES completion:nil];
}

从您的问题中,您并不能完全清楚地知道是这个演示文稿还是您正在谈论的 TableView 类中的演示文稿。看起来您在表示方面做错了什么——您从 TableView Controller 中呈现选择器 View ,并且还从选择器中呈现 TableView Controller 。这是不正确的,您应该展示您希望第二个出现的 Controller ,并且该 Controller 应该使用 dismissViewControllerAnimated 返回,而不是展示另一个 Controller 。

关于ios - 我怎样才能交替 View Controller 而不丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24064268/

相关文章:

ios - 付款队列 :(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions is not called while restoreCompletedTransactions

ios - 调用 setNeedsDisplay 时出现快速奇怪的行为

ios - 在单击后退按钮时再次调用 searchBarTextDidBeginEditing 委托(delegate)方法

ios - UITableViewCell Swift 中的自定义 View

iOS - 即使使用 NavController,Push Segue 也无法正常工作

ios - 在内存限制下调整 UIImage 的大小

ios - Swift下载速度说明

objective-c - 关闭 2 个模态视图 Controller

objective-c - NSURLConnection 发送异步请求 :queue:completionHandler: making multiple requests in a row?

ios - UITabBar 中的 UIView 未扩展至完整