zoukankan      html  css  js  c++  java
  • iOS存储的三种方式

    iOS中存储的3中方式:

    1.NSUserDefaults

    注意存储基本对象类型是没有问题的,但是要存储自定义对象,则要将对象内所有的属性(或是需要存储的属性)序列化,实现NSCoding协议序列化。

    存:
    [[NSUserDefaults standardUserDefaults] setValue:@"yellow" forKey:@"color"]; [[NSUserDefaults standardUserDefaults] synchronize];
    取:
    NSString *color = [[NSUserDefaults standardUserDefaults] objectForKey:@"color"];

     对于存储的是自定义的对象:(示例Contact的序列化)

    #import <Foundation/Foundation.h>
    
    @interface Contact : NSObject <NSCoding>
    
    @property (nonatomic,retain) NSString *name;
    @property (nonatomic,retain) NSString *phoneNumber;
    
    + (id)contactsWithName:(NSString *)aName phoneNumber:(NSString *)aPhoneNumber;
    
    @end
    #import "Contact.h"

    #define
    kNameKey @"NameKey" #define kPhoneNumberKey @"PhoneNumberKey" @implementation Contact - (id)initWithName:(NSString *)aName phoneNumber:(NSString *)aPhoneNumber { if (self = [super init]) { self.name = aName; self.phoneNumber = aPhoneNumber; } return self; } //初始化配套的便利方法 ,静态方法中的self 不代表当前类的对象,代表当前类本身 + (id)contactsWithName:(NSString *)aName phoneNumber:(NSString *)aPhoneNumber { return [[[self alloc] initWithName:aName phoneNumber:aPhoneNumber] autorelease]; } //对象序列化的两个协议方法 //对象序列化的方法,把对象的所有属性编码到本地 - (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:_name forKey:kNameKey]; [aCoder encodeObject:_phoneNumber forKey:kPhoneNumberKey]; } //对象反序列化的方法 - (id)initWithCoder:(NSCoder *)aDecoder { if(self = [super init]) { self.name = [aDecoder decodeObjectForKey:kNameKey]; self.phoneNumber = [aDecoder decodeObjectForKey:kPhoneNumberKey]; } return self; }

    2.沙盒

    - (void)viewDidLoad 
    {
        [super viewDidLoad];
        
        NSMutableDictionary *savedDic = [[NSMutableDictionary alloc] initWithContentsOfFile:[self dataFilePath]];
        
        //如果第一次进入,从userdefault中取不到数据,手动创建一个字典
        if (!savedDic)
        {
            self.dic = [NSMutableDictionary dictionaryWithCapacity:0];
        }
        else 
        {
            self.dic = savedDic;
        }
        //注册一个即将进入后台的通知
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveData) name:UIApplicationWillResignActiveNotification object:nil];
        
    }
    
    //返回文件的路径
    - (NSString *)dataFilePath
    {
        //沙盒
        //获得沙盒下面Documents文件夹的路径
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSLog(@"paths   %@",paths);
        NSString *path = [paths objectAtIndex:0];
        //在documents 路径下,追加一个文件路径
        NSString *filePath = [path stringByAppendingPathComponent:@"select.plist"];
        
        return filePath;           
    }
    
    - (void)saveData
    {
        //字典当中存储的value 必须是  array dictionary Boolean data date nsnumber nsstring
        //把一个字典写到文件中,实际上是按照plist 的格式去组织数据的
        [_dic writeToFile:[self dataFilePath] atomically:YES];
        NSMutableDictionary *savedDic = [[NSMutableDictionary alloc] initWithContentsOfFile:[self dataFilePath]];
    }

    3.sqlite

     
     
     
  • 相关阅读:
    视觉三维重建中不同三角网格视角的选择
    最小二乘求解常数k使得kx=y(x,y为列向量)
    STL常用
    2D-2D:对极几何 基础矩阵F 本质矩阵E 单应矩阵H
    Ubuntu常用软件
    ubuntu linux 安装分区
    单向链表
    1.ssm web项目中的遇到的坑--自定义JQuery插件(slide menu)
    模板引擎freemarker的使用(二)
    模板引擎freemarker的使用(一)
  • 原文地址:https://www.cnblogs.com/renlipeng/p/4558798.html
Copyright © 2011-2022 走看看