数据的保存(自己弄个plist存储数据)

本文介绍了一个iOS应用中如何实现用户填写表单数据的保存功能,并使用字典对象将信息持久化存储在plist文件中。此外,还详细说明了如何处理键盘弹出时界面的适配问题,通过监听键盘事件并调整视图位置来优化用户体验。

// save方法用于保存用户填写的信息

- (IBAction)save:(UIButton*)sender {

    // 获取填入表格中的数据

    NSString *name=self.nameField.text;

    NSString *birthday=self.birthdayField.text;

    NSIntegersex=self.sexSegment.selectedSegmentIndex;

    NSString *number=self.numberField.text;

    // 判断表格填写是否完整

    if(!name.length||!birthday.length||!number.length){

        UIAlertView *alert=[[UIAlertViewalloc]initWithTitle:@"提示"message:

@"信息不完整,请重新填写" delegate:nil cancelButtonTitle:@"确定"

otherButtonTitles:nil];

        [alert show];

        return;

    }

     [self.view endEditing:YES];

    // 创建字典对象封装学生信息

    NSMutableDictionary*Student=[[NSMutableDictionary alloc]init];

    NSMutableDictionary*dic=[[NSMutableDictionary alloc]init];

    [Student setObject:nameforKey:@"Name"];

    [Student setObject:birthday forKey:@"Birthday"];

    [Student setObject:[NSNumbernumberWithInteger:sex] forKey:@"Sex"];

    [Student setObject:number forKey:@"Number"];

    [dic setObject:StudentforKey:@"Student"];

    // 将字典对象转为属性列表持久保存在plist文件中

    if ([dic writeToFile:[self filePath]atomically:YES]) {

   UIAlertView *alert=[[UIAlertViewalloc]initWithTitle:@"提示"message:@"保存成功"

                    delegate:nilcancelButtonTitle:@"确定"otherButtonTitles:nil];

        [alert show];

    }

    return;

}

// 获取plist文件的路径

- (NSString *) filePath

{

    // 获取应用程序的沙盒目录

    NSArray*array=NSSearchPathForDirectoriesInDomains

                              (NSDocumentDirectory,NSUserDomainMask,YES);

    NSString *path=[array objectAtIndex:0];

    return [pathstringByAppendingPathComponent:FileName];

}

// 屏幕单击事件响应

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

    [self.view endEditing:YES]; // 退出键盘

}

// 按回车键,切换文本框的输入焦点

-(BOOL)textFieldShouldReturn:(UITextField *)textField

{

    if (textField == self.nameField) {

        [self.birthdayFieldbecomeFirstResponder];  // 切换到birthField

    }else if (textField == self.birthdayField){

        [self.numberFieldbecomeFirstResponder]; // 切换到numberField

    }

    return YES;

}

//依次为三个输入框添加代理


 (2)当用户填写信息时,由于屏幕有限,键盘弹起后会遮挡填写数据的页面,导致用户无法操作,针对这种情况,将整个程序界面上移是一个很好的解决方法。接下来,在viewDidLoad方法中

添加键盘弹起和关闭事件的监听,之后在事件响应方法中改变Y坐标,利用UIView的动画效果,实现应用程序界面弹起和落下的效果,具体代码如下所示:

- (void)viewDidLoad {

    [super viewDidLoad];

    // 注册通知监听器,监听键盘弹起事件

    [[NSNotificationCenter defaultCenter]addObserver:self

         selector:@selector(keyboardWillShow:)

              name:UIKeyboardWillShowNotificationobject:nil];

    // 注册通知监听器,监听键盘收起事件

    [[NSNotificationCenter defaultCenter]addObserver:self

         selector:@selector(keyboardWillHide:)

             name:UIKeyboardWillHideNotificationobject:nil];

}

// 键盘弹出时激发该方法

– (void)keyboardWillShow:(NSNotification*)notification

{

    // 开始视图升起动画效果

    [UIView beginAnimations:@”keyboardWillShow”context:nil];

    [UIViewsetAnimationCurve:UIViewAnimationCurveEaseInOut];

    // 获取主视图View的位置

    CGRect rect = self.view.frame;

    rect.origin.y = -60;

    // 更改主视图View的位置

    self.view.frame = rect;

    // 结束动画

    [UIView commitAnimations];

}

// 键盘关闭时激发该方法

– (void)keyboardWillHide:(NSNotification*)notification

{

    // 开始视图下降动画效果

    [UIView beginAnimations:@”keyboardWillHide”context:nil];

    [UIViewsetAnimationCurve:UIViewAnimationCurveEaseInOut];

    // 获取主视图View的位置

    CGRect rect = self.view.frame;

    rect.origin.y = 0;

    // 恢复主视图View的位置

    self.view.frame = rect;

    // 结束动画

    [UIView commitAnimations];

}

– (void)dealloc

{

    // 移除通知监听器

    [[NSNotificationCenter defaultCenter]removeObserver:self];

}


先展示下效果 https://pan.quark.cn/s/a4b39357ea24 遗传算法 - 简书 遗传算法的理论是根据达尔文进化论而设计出来的算法: 人类是朝着好的方向(最优解)进化,进化过程中,会自动选择优良基因,淘汰劣等基因。 遗传算法(英语:genetic algorithm (GA) )是计算数学中用于解决最佳化的搜索算法,是进化算法的一种。 进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择、杂交等。 搜索算法的共同特征为: 首先组成一组候选解 依据某些适应性条件测算这些候选解的适应度 根据适应度保留某些候选解,放弃其他候选解 对保留的候选解进行某些操作,生成新的候选解 遗传算法流程 遗传算法的一般步骤 my_fitness函数 评估每条染色体所对应个体的适应度 升序排列适应度评估值,选出 前 parent_number 个 个体作为 待选 parent 种群(适应度函数的值越小越好) 从 待选 parent 种群 中随机选择 2 个个体作为父方和母方。 抽取父母双方的染色体,进行交叉,产生 2 个子代。 (交叉概率) 对子代(parent + 生成的 child)的染色体进行变异。 (变异概率) 重复3,4,5步骤,直到新种群(parentnumber + childnumber)的产生。 循环以上步骤直至找到满意的解。 名词解释 交叉概率:两个个体进行交配的概率。 例如,交配概率为0.8,则80%的“夫妻”会生育后代。 变异概率:所有的基因中发生变异的占总体的比例。 GA函数 适应度函数 适应度函数由解决的问题决定。 举一个平方和的例子。 简单的平方和问题 求函数的最小值,其中每个变量的取值区间都是 [-1, ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值