• iOS 数据持久性存储-属性列表


    iOS上常用四种数据存取方法有:

      1.属性列表

      2.对象归档

      3.iOS的嵌入式关系数据库(SQLite3)

      4.苹果公司提供持久性共聚Core Data

      由于苹果公司的沙盒机制,每个应用程序都有自己的/Documents文件夹,各自的应用程序只能读写自己的/Documents目录内容

      这里将对以上4个内容分开解释。

      属性列表:

      这里你可以新建一个项目Persistence来熟悉属性列表

      1.放置4个UILabel和4个UITextField到界面上(小技巧:放好第一行label和textfield后,按住option键,往下拖拽,就可复制)

      

      2.为每个UITextField在XXViewController.h里定义输出口IBoutlet

        可以在窗口右上角打开助理编辑器,按住control键,依次从UITextField拖到Persistence.h里,如图

      

      3.在XXViewController.h建立两个方法,一个用于返回数据文件完整路径名,一个用于在程序被调到后台时开始保存UITextField内容

      XXViewController.h完整代码如下:

      

    #import <UIKit/UIKit.h>
    
    @interface BSLViewController : UIViewController
    @property (weak, nonatomic) IBOutlet UITextField *field1;
    @property (weak, nonatomic) IBOutlet UITextField *field2;
    @property (weak, nonatomic) IBOutlet UITextField *field3;
    @property (weak, nonatomic) IBOutlet UITextField *field4;
    
    
    - (NSString *)dataFilePath;
    - (void)applicationWillResignActive:(NSNotification *)notification;
    @end
    View Code

      4.在XXViewController.m实现方法.

      在#import下方定义一个宏文件名#define kFilename @"myData.plist"

      在@implementation下方同步.h中声明的属性@synthesize field1,field2,field3,field4;

      

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        
        NSString *filePath = [self dataFilePath];
        //检查数据文件是否存在,如果存在就用此文件内容实例化数组
        if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
            NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath];
            field1.text = [array objectAtIndex:0];
            field2.text = [array objectAtIndex:1];
            field3.text = [array objectAtIndex:2];
            field4.text = [array objectAtIndex:3];
        }
        
        //注册一个通知,程序进入后台立即执行applicationWillResignActive:方法
        UIApplication *app = [UIApplication sharedApplication];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive:) name:UIApplicationWillResignActiveNotification object:app];
    }
    View Code
     //用于返回数据文件完整路径名
    - (NSString *)dataFilePath{
        NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    //数组索引0处就是Documentd目录
        NSString *documentsDirectory = [path objectAtIndex:0];
        return [documentsDirectory stringByAppendingPathComponent:kFilename];
    }
    View Code
        //当用户不再与程序交互,调用此方法
    - (void)applicationWillResignActive:(NSNotification *)notification{
        NSMutableArray *mutableArray = [[NSMutableArray alloc] init];
        [mutableArray addObject:field1.text];
        [mutableArray addObject:field2.text];
        [mutableArray addObject:field3.text];
        [mutableArray addObject:field4.text];
        //将内容写入到属性列表中
        [mutableArray writeToFile:[self dataFilePath] atomically:YES];
    }
    View Code
  • 相关阅读:
    [转载]为 Windows 下的 PHP 安装 PEAR 和 PHPUnit
    作品和案例
    js创建对象的最佳实践
    log4j的PatternLayout参数含义
    Java线程池——ThreadPoolExecutor的使用
    登录mysql 报 Access denied for user 'root'@'localhost' 错误
    CentOS 7下使用yum安装MySQL5.7
    linux下MySQL停止和重启
    Linux 命令 -- chown
    Linux 命令 -- chmod
  • 原文地址:https://www.cnblogs.com/sparks/p/3828788.html
Copyright © 2020-2023  润新知