亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

詳解iOS開發中app的歸檔以及偏好設置的存儲方式

2020-07-26 03:30:40
字體:
來源:轉載
供稿:網友

ios應用數據存儲方式(歸檔)

一、簡單說明

在使用plist進行數據存儲和讀取,只適用于系統自帶的一些常用類型才能用,且必須先獲取路徑相對麻煩;
偏好設置(將所有的東西都保存在同一個文件夾下面,且主要用于存儲應用的設置信息)
歸檔:因為前兩者都有一個致命的缺陷,只能存儲常用的類型。歸檔可以實現把自定義的對象存放在文件中。
二、代碼示例

1.文件結構

2015122391505494.png (1392×334)

2.代碼示例

 YYViewController.m文件

復制代碼 代碼如下:

//
//  YYViewController.m
//  02-歸檔
//
//  Created by apple on 14-6-7.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"
#import "YYPerson.h"

@interface YYViewController ()
- (IBAction)saveBtnOnclick:(id)sender;
- (IBAction)readBtnOnclick:(id)sender;

@end


復制代碼 代碼如下:

@implementation YYViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
}


- (IBAction)saveBtnOnclick:(id)sender {
    //1.創建對象
    YYPerson *p=[[YYPerson alloc]init];
    p.name=@"文頂頂";
    p.age=23;
    p.height=1.7;
   
    //2.獲取文件路徑
    NSString *docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
    NSString *path=[docPath stringByAppendingPathComponent:@"person.yangyang"];
    NSLog(@"path=%@",path);
   
    //3.將自定義的對象保存到文件中
    [NSKeyedArchiver archiveRootObject:p toFile:path];
   
}

- (IBAction)readBtnOnclick:(id)sender {
    //1.獲取文件路徑
    NSString *docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
    NSString *path=[docPath stringByAppendingPathComponent:@"person.yangyang"];
    NSLog(@"path=%@",path);
   
    //2.從文件中讀取對象
    YYPerson *p=[NSKeyedUnarchiver unarchiveObjectWithFile:path];
    NSLog(@"%@,%d,%.1f",p.name,p.age,p.height);
}
@end


新建一個person類

YYPerson.h文件

復制代碼 代碼如下:

//
//  YYPerson.h
//  02-歸檔
//
//  Created by apple on 14-6-7.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import <Foundation/Foundation.h>

// 如果想將一個自定義對象保存到文件中必須實現NSCoding協議
@interface YYPerson : NSObject<NSCoding>

//姓名
@property(nonatomic,copy)NSString *name;
//年齡
@property(nonatomic,assign)int age;
//身高
@property(nonatomic,assign)double height;
@end


YYPerson.m文件
復制代碼 代碼如下:

//
//  YYPerson.m
//  02-歸檔
//
//  Created by apple on 14-6-7.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYPerson.h"

@implementation YYPerson

// 當將一個自定義對象保存到文件的時候就會調用該方法
// 在該方法中說明如何存儲自定義對象的屬性
// 也就說在該方法中說清楚存儲自定義對象的哪些屬性
-(void)encodeWithCoder:(NSCoder *)aCoder
{
    NSLog(@"調用了encodeWithCoder:方法");
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeInteger:self.age forKey:@"age"];
    [aCoder encodeDouble:self.height forKey:@"height"];
}

// 當從文件中讀取一個對象的時候就會調用該方法
// 在該方法中說明如何讀取保存在文件中的對象
// 也就是說在該方法中說清楚怎么讀取文件中的對象
-(id)initWithCoder:(NSCoder *)aDecoder
{
    NSLog(@"調用了initWithCoder:方法");
    //注意:在構造方法中需要先初始化父類的方法
    if (self=[super init]) {
        self.name=[aDecoder decodeObjectForKey:@"name"];
        self.age=[aDecoder decodeIntegerForKey:@"age"];
        self.height=[aDecoder decodeDoubleForKey:@"height"];
    }
    return self;
}
@end


3.打印效果和兩個重要的錯誤提示

點擊保存按鈕和讀取按鈕,成功打印結果如下:

2015122391719254.png (882×137)

關于不實現兩個協議方法的錯誤提示:
-(void)encodeWithCoder:(NSCoder *)aCoder方法:

2015122391737211.png (429×303)

-(id)initWithCoder:(NSCoder *)aDecoder方法:

2015122391754899.png (427×283)

三、繼承類中的使用

新建一個學生類,讓這個類繼承自Preson這個類,增加一個體重的屬性。

YYstudent.h文件

復制代碼 代碼如下:

//
//  YYstudent.h
//  02-歸檔
//
//  Created by apple on 14-6-7.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYPerson.h"

@interface YYstudent : YYPerson
//增加一個體重屬性
@property(nonatomic,assign) double weight;
@end


YYstudent.m文件
復制代碼 代碼如下:

//
//  YYstudent.m
//  02-歸檔
//
//  Created by apple on 14-6-7.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYstudent.h"

@implementation YYstudent

//在子類中重寫這兩個方法
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [super encodeWithCoder:aCoder];
    NSLog(@"調用了YYStudent encodeWithCoder");
    [aCoder encodeFloat:self.weight forKey:@"weight"];
}

- (id)initWithCoder:(NSCoder *)aDecoder
{
    if (self = [super initWithCoder:aDecoder]) {
        NSLog(@"調用了YYstudent initWithCoder");
        self.weight = [aDecoder decodeFloatForKey:@"weight"];
    }
    return self;
}
@end


YYViewController.m文件
復制代碼 代碼如下:

//
//  YYViewController.m
//  02-歸檔
//
//  Created by apple on 14-6-7.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"
#import "YYPerson.h"
#import "YYstudent.h"

@interface YYViewController ()
- (IBAction)saveBtnOnclick:(id)sender;
- (IBAction)readBtnOnclick:(id)sender;

@end


復制代碼 代碼如下:

@implementation YYViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
}


- (IBAction)saveBtnOnclick:(id)sender {
    //1.創建對象
//    YYPerson *p=[[YYPerson alloc]init];
//    p.name=@"文頂頂";
//    p.age=23;
//    p.height=1.7;
   
    YYstudent *s=[[YYstudent alloc]init];
    s.name=@"wendingding";
    s.age=23;
    s.height=1.7;
    s.weight=62;
    //2.獲取文件路徑
    NSString *docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
    NSString *path=[docPath stringByAppendingPathComponent:@"person.yangyang"];
    NSLog(@"path=%@",path);
    
    //3.將自定義的對象保存到文件中
//    [NSKeyedArchiver archiveRootObject:p toFile:path];
     [NSKeyedArchiver archiveRootObject:s toFile:path];
   
}

- (IBAction)readBtnOnclick:(id)sender {
    //1.獲取文件路徑
    NSString *docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
    NSString *path=[docPath stringByAppendingPathComponent:@"person.yangyang"];
    NSLog(@"path=%@",path);
   
    //2.從文件中讀取對象
//    YYPerson *p=[NSKeyedUnarchiver unarchiveObjectWithFile:path];
//    NSLog(@"%@,%d,%.1f",p.name,p.age,p.height);
    YYstudent *s=[NSKeyedUnarchiver unarchiveObjectWithFile:path];
    NSLog(@"%@,%d,%.1f,%f",s.name,s.age,s.height,s.weight);
}
@end


2015122391814869.png (879×179)

四、重要說明

1.保存數據過程:

復制代碼 代碼如下:

//1.創建對象
    YYstudent *s=[[YYstudent alloc]init];
    s.name=@"wendingding";
    s.age=23;
    s.height=1.7;
    s.weight=62;
   
    //2.獲取文件路徑
    NSString *docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
    NSString *path=[docPath stringByAppendingPathComponent:@"person.yangyang"];
    NSLog(@"path=%@",path);
   
    //3.將自定義的對象保存到文件中
     [NSKeyedArchiver archiveRootObject:s toFile:path];

//1.創建對象
    YYstudent *s=[[YYstudent alloc]init];
    s.name=@"wendingding";
    s.age=23;
    s.height=1.7;
    s.weight=62;
   
    //2.獲取文件路徑
    NSString *docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
    NSString *path=[docPath stringByAppendingPathComponent:@"person.yangyang"];
    NSLog(@"path=%@",path);
   
    //3.將自定義的對象保存到文件中
     [NSKeyedArchiver archiveRootObject:s toFile:path];


ios應用數據存儲方式(偏好設置)
一、簡單介紹

很多iOS應用都支持偏好設置,比如保存用戶名、密碼、字體大小等設置,iOS提供了一套標準的解決方案來為應用加入偏好設置功能

每個應用都有個NSUserDefaults實例,通過它來存取偏好設置。比如,保存用戶名、字體大小、是否自動登錄

存儲位置:

2015122391847156.png (319×120)

存儲形式:

2015122391905404.png (340×180)

二、代碼示例

1.storyboard

2015122391922465.png (1038×427)

2.代碼

復制代碼 代碼如下:

//
//  YYViewController.m
//  01-偏好設置
//
//  Created by apple on 14-6-7.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"
//偏好設置
@interface YYViewController ()
/**
 *保存數據
 */
- (IBAction)saveData:(id)sender;
/**
 *  讀取數據
 */
- (IBAction)readData:(id)sender;

@end


復制代碼 代碼如下:

@implementation YYViewController

- (IBAction)saveData:(id)sender {
    //1.獲取NSUserDefaults對象
    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
   
    //2保存數據(如果設置數據之后沒有同步, 會在將來某一時間點自動將數據保存到Preferences文件夾下面)
    [defaults setObject:@"yangyong" forKey:@"name"];
    [defaults setInteger:23 forKey:@"age"];
    [defaults setDouble:1.73f forKey:@"height"];
    [defaults setObject:@"man" forKey:@"gender"];
   
    //3.強制讓數據立刻保存
    [defaults synchronize];
}

- (IBAction)readData:(id)sender {
    //1.獲取NSUserDefaults對象
    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    //讀取保存的數據
    NSString *name=[defaults objectForKey:@"name"];
    NSString *gender=[defaults objectForKey:@"gender"];
    NSInteger age=[defaults integerForKey:@"age"];
    double height=[defaults doubleForKey:@"height"];
    //打印數據
    NSLog(@"name=%@,gender=%@,age=%d,height=%.1f",name,gender,age,height);
}
@end


3.點擊保存數據,讀取數據按鈕打印如下

2015122391953368.png (440×109)

三、補充說明

1.保存數據

復制代碼 代碼如下:

//1.獲取NSUserDefaults對象
    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
   
    //2保存數據
    [defaults setObject:@"yangyong" forKey:@"name"];
    [defaults setInteger:23 forKey:@"age"];
    [defaults setDouble:1.73f forKey:@"height"];
    [defaults setObject:@"man" forKey:@"gender"];
   
    //3.強制讓數據立刻保存
    [defaults synchronize];

2.讀取數據
復制代碼 代碼如下:

//1.獲取NSUserDefaults對象
    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    //2.讀取保存的數據
    NSString *name=[defaults objectForKey:@"name"];
    NSString *gender=[defaults objectForKey:@"gender"];
    NSInteger age=[defaults integerForKey:@"age"];
    double height=[defaults doubleForKey:@"height"];

3.重要說明

(1)偏好設置是專門用來保存應用程序的配置信息的, 一般情況不要在偏好設置中保存其他數據。如果利用系統的偏好設置來存儲數據, 默認就是存儲在Preferences文件夾下面的,偏好設置會將所有的數據都保存到同一個文件中。

(2)使用偏好設置對數據進行保存之后, 它保存到系統的時間是不確定的,會在將來某一時間點自動將數據保存到Preferences文件夾下面,如果需要即刻將數據存儲,可以使用[defaults synchronize];

(3)注意點:所有的信息都寫在一個文件中,對比簡單的plist可以保存和讀取基本的數據類型。

(4)步驟:獲取NSuserDefaults,保存(讀?。祿?br />

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲人成网在线播放| 欧美精品一区二区免费| 欧美精品在线播放| 欧美猛交ⅹxxx乱大交视频| 高清一区二区三区四区五区| 亚洲精品乱码久久久久久金桔影视| 国产精品亚洲视频在线观看| 91亚洲人电影| 亚洲级视频在线观看免费1级| 亚洲变态欧美另类捆绑| 久久理论片午夜琪琪电影网| 91色琪琪电影亚洲精品久久| 欧美一乱一性一交一视频| 国产精品wwww| 色悠悠久久88| 国产精品91久久久| 亚洲白虎美女被爆操| 欧洲精品久久久| 日韩**中文字幕毛片| 欧美一区二区三区……| 97香蕉久久超级碰碰高清版| 亚洲经典中文字幕| 欧美一级片在线播放| 91精品一区二区| 日韩av中文字幕在线| 日韩电影在线观看免费| 日本韩国欧美精品大片卡二| 91国产视频在线| 欧美另类极品videosbest最新版本| 日韩大片在线观看视频| www.亚洲男人天堂| 成人黄色影片在线| 日韩欧美在线视频免费观看| 成人福利网站在线观看| 久久av.com| 精品视频在线观看日韩| 亚洲国产一区自拍| 欧美黑人国产人伦爽爽爽| 国产丝袜一区二区三区| 欧美伦理91i| 在线国产精品播放| 久久精品一区中文字幕| 国产精品69久久| 国产热re99久久6国产精品| 久久久成人av| 久久综合九色九九| 国产精品一区二区久久| 日韩av色在线| 欧美日韩激情网| 亚洲精品自在久久| 亚洲国产精品成人av| 深夜福利一区二区| 中文字幕欧美在线| 久久777国产线看观看精品| 成人国产精品久久久久久亚洲| 激情懂色av一区av二区av| 欧美美最猛性xxxxxx| 欧美日韩精品二区| www亚洲精品| 91免费人成网站在线观看18| 国产精品欧美一区二区| 亚洲国产精品久久久久| 欧美老女人在线视频| 欧美在线视频一区| 国产一区二区久久精品| 亚洲影视九九影院在线观看| 日韩在线免费高清视频| 亚洲免费视频观看| 欧美色图在线视频| 日韩黄色在线免费观看| 国产精品天天狠天天看| 日韩最新中文字幕电影免费看| 国产精品久久久久久久久久东京| 91中文字幕在线| 成人日韩在线电影| 亚洲第一网站免费视频| 欧美性猛交xxxx偷拍洗澡| 91九色视频导航| 亚洲精品电影久久久| 欧美亚洲另类激情另类| 国产精品自产拍高潮在线观看| 久久久久久亚洲精品中文字幕| 欧美巨猛xxxx猛交黑人97人| 成人亲热视频网站| 日韩中文有码在线视频| 色综合天天狠天天透天天伊人| 欧美日韩一二三四五区| 亚洲剧情一区二区| 精品久久久国产精品999| 亚洲欧美国产精品va在线观看| 国产视频精品久久久| 国产成人免费av电影| 欧美一级片久久久久久久| 久久久久久久电影一区| 91精品国产91久久久久久吃药| 欧美高清理论片| 亚洲片国产一区一级在线观看| 97香蕉久久超级碰碰高清版| 中文字幕少妇一区二区三区| 91国自产精品中文字幕亚洲| 青青久久aⅴ北条麻妃| 久久久精品电影| 浅井舞香一区二区| 久久精品影视伊人网| 欧美激情综合色综合啪啪五月| 欧美成在线观看| 成人精品在线观看| 黑人巨大精品欧美一区二区三区| 一本色道久久88综合日韩精品| 国产精品国语对白| 久久久久久91香蕉国产| 国产精品高潮呻吟久久av黑人| 亚洲美女动态图120秒| 91久久精品国产91性色| 国产精品午夜国产小视频| 日韩av综合中文字幕| 欧美国产日韩xxxxx| 久久久久久久久久久免费精品| 亚洲精品一区av在线播放| 欧美性xxxx极品hd欧美风情| 欧美激情精品久久久久久免费印度| 色香阁99久久精品久久久| 亚洲一区二区三区乱码aⅴ| 久久精品久久久久| 亚洲国产小视频在线观看| 欧美精品videos| 97在线视频免费看| 欧美日韩中文字幕日韩欧美| 国产精品99久久久久久久久久久久| 国模gogo一区二区大胆私拍| 日韩午夜在线视频| 亚洲精品自在久久| 日韩精品中文字幕视频在线| 国产99在线|中文| 色老头一区二区三区在线观看| 久久激情五月丁香伊人| 国产91在线播放| 在线亚洲国产精品网| 色青青草原桃花久久综合| 91亚洲午夜在线| 国产精品第三页| 国产a∨精品一区二区三区不卡| 欧美一区二区三区免费观看| 高清欧美性猛交xxxx黑人猛交| 久久色精品视频| 91免费精品国偷自产在线| 久久久久久午夜| 亚洲欧美国内爽妇网| 成人精品一区二区三区电影免费| 中文字幕免费国产精品| 欧美丰满片xxx777| 91av在线免费观看视频| 国产视频自拍一区| 欧美高清视频免费观看| 久久久久久亚洲| 欧美日韩成人网| 懂色av一区二区三区| 日韩成人久久久| 午夜欧美不卡精品aaaaa| 国产丝袜一区二区三区| 综合av色偷偷网| 亚洲天堂男人天堂女人天堂| 久久久久北条麻妃免费看| 亚洲成色www8888|