国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

詳解iOS開發(fā)中app的歸檔以及偏好設(shè)置的存儲(chǔ)方式

2019-10-21 18:56:32
字體:
供稿:網(wǎng)友
這篇文章主要介紹了iOS開發(fā)中app的歸檔以及偏好設(shè)置的存儲(chǔ)方式,示例代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下
 

ios應(yīng)用數(shù)據(jù)存儲(chǔ)方式(歸檔)

一、簡(jiǎn)單說明

在使用plist進(jìn)行數(shù)據(jù)存儲(chǔ)和讀取,只適用于系統(tǒng)自帶的一些常用類型才能用,且必須先獲取路徑相對(duì)麻煩;
偏好設(shè)置(將所有的東西都保存在同一個(gè)文件夾下面,且主要用于存儲(chǔ)應(yīng)用的設(shè)置信息)
歸檔:因?yàn)榍皟烧叨加幸粋€(gè)致命的缺陷,只能存儲(chǔ)常用的類型。歸檔可以實(shí)現(xiàn)把自定義的對(duì)象存放在文件中。
二、代碼示例

1.文件結(jié)構(gòu)

詳解iOS開發(fā)中app的歸檔以及偏好設(shè)置的存儲(chǔ)方式

2.代碼示例

 YYViewController.m文件

復(fù)制代碼代碼如下:

//
//  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


復(fù)制代碼代碼如下:

@implementation YYViewController

 

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


- (IBAction)saveBtnOnclick:(id)sender {
    //1.創(chuàng)建對(duì)象
    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.將自定義的對(duì)象保存到文件中
    [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.從文件中讀取對(duì)象
    YYPerson *p=[NSKeyedUnarchiver unarchiveObjectWithFile:path];
    NSLog(@"%@,%d,%.1f",p.name,p.age,p.height);
}
@end


新建一個(gè)person類

 

YYPerson.h文件

復(fù)制代碼代碼如下:

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

 

#import <Foundation/Foundation.h>

// 如果想將一個(gè)自定義對(duì)象保存到文件中必須實(shí)現(xiàn)NSCoding協(xié)議
@interface YYPerson : NSObject<NSCoding>

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


YYPerson.m文件
復(fù)制代碼代碼如下:

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

 

#import "YYPerson.h"

@implementation YYPerson

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

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


3.打印效果和兩個(gè)重要的錯(cuò)誤提示

 

點(diǎn)擊保存按鈕和讀取按鈕,成功打印結(jié)果如下:

詳解iOS開發(fā)中app的歸檔以及偏好設(shè)置的存儲(chǔ)方式

關(guān)于不實(shí)現(xiàn)兩個(gè)協(xié)議方法的錯(cuò)誤提示:
-(void)encodeWithCoder:(NSCoder *)aCoder方法:

詳解iOS開發(fā)中app的歸檔以及偏好設(shè)置的存儲(chǔ)方式

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

詳解iOS開發(fā)中app的歸檔以及偏好設(shè)置的存儲(chǔ)方式

三、繼承類中的使用

新建一個(gè)學(xué)生類,讓這個(gè)類繼承自Preson這個(gè)類,增加一個(gè)體重的屬性。

YYstudent.h文件

復(fù)制代碼代碼如下:

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

 

#import "YYPerson.h"

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


YYstudent.m文件
復(fù)制代碼代碼如下:

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

 

#import "YYstudent.h"

@implementation YYstudent

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

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


YYViewController.m文件
復(fù)制代碼代碼如下:

//
//  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


復(fù)制代碼代碼如下:

@implementation YYViewController

 

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


- (IBAction)saveBtnOnclick:(id)sender {
    //1.創(chuàng)建對(duì)象
//    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.將自定義的對(duì)象保存到文件中
//    [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.從文件中讀取對(duì)象
//    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


 

詳解iOS開發(fā)中app的歸檔以及偏好設(shè)置的存儲(chǔ)方式

 

四、重要說明

1.保存數(shù)據(jù)過程:

復(fù)制代碼代碼如下:

//1.創(chuàng)建對(duì)象
    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.將自定義的對(duì)象保存到文件中
     [NSKeyedArchiver archiveRootObject:s toFile:path];

 

//1.創(chuàng)建對(duì)象
    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.將自定義的對(duì)象保存到文件中
     [NSKeyedArchiver archiveRootObject:s toFile:path];


ios應(yīng)用數(shù)據(jù)存儲(chǔ)方式(偏好設(shè)置)
一、簡(jiǎn)單介紹

 

很多iOS應(yīng)用都支持偏好設(shè)置,比如保存用戶名、密碼、字體大小等設(shè)置,iOS提供了一套標(biāo)準(zhǔn)的解決方案來為應(yīng)用加入偏好設(shè)置功能

每個(gè)應(yīng)用都有個(gè)NSUserDefaults實(shí)例,通過它來存取偏好設(shè)置。比如,保存用戶名、字體大小、是否自動(dòng)登錄

存儲(chǔ)位置:

詳解iOS開發(fā)中app的歸檔以及偏好設(shè)置的存儲(chǔ)方式

存儲(chǔ)形式:

詳解iOS開發(fā)中app的歸檔以及偏好設(shè)置的存儲(chǔ)方式

二、代碼示例

1.storyboard

詳解iOS開發(fā)中app的歸檔以及偏好設(shè)置的存儲(chǔ)方式

2.代碼

復(fù)制代碼代碼如下:

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

 

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

@end


復(fù)制代碼代碼如下:

@implementation YYViewController

 

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

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


3.點(diǎn)擊保存數(shù)據(jù),讀取數(shù)據(jù)按鈕打印如下

 

詳解iOS開發(fā)中app的歸檔以及偏好設(shè)置的存儲(chǔ)方式

三、補(bǔ)充說明

1.保存數(shù)據(jù)

復(fù)制代碼代碼如下:

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

2.讀取數(shù)據(jù)
復(fù)制代碼代碼如下:

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

3.重要說明

 

(1)偏好設(shè)置是專門用來保存應(yīng)用程序的配置信息的, 一般情況不要在偏好設(shè)置中保存其他數(shù)據(jù)。如果利用系統(tǒng)的偏好設(shè)置來存儲(chǔ)數(shù)據(jù), 默認(rèn)就是存儲(chǔ)在Preferences文件夾下面的,偏好設(shè)置會(huì)將所有的數(shù)據(jù)都保存到同一個(gè)文件中。

(2)使用偏好設(shè)置對(duì)數(shù)據(jù)進(jìn)行保存之后, 它保存到系統(tǒng)的時(shí)間是不確定的,會(huì)在將來某一時(shí)間點(diǎn)自動(dòng)將數(shù)據(jù)保存到Preferences文件夾下面,如果需要即刻將數(shù)據(jù)存儲(chǔ),可以使用[defaults synchronize];

(3)注意點(diǎn):所有的信息都寫在一個(gè)文件中,對(duì)比簡(jiǎn)單的plist可以保存和讀取基本的數(shù)據(jù)類型。

(4)步驟:獲取NSuserDefaults,保存(讀取)數(shù)據(jù)



注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到IOS開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 喜德县| 唐海县| 济宁市| 安仁县| 塘沽区| 荆州市| 萍乡市| 句容市| 巫溪县| 宜阳县| 阿拉善盟| 淮北市| 宜兰市| 浙江省| 曲松县| 舞阳县| 福州市| 准格尔旗| 靖宇县| 徐汇区| 杭州市| 宁南县| 建始县| 凌源市| 邢台县| 麻江县| 汪清县| 宜宾县| 常州市| 宣汉县| 江北区| 昌吉市| 梨树县| 乌兰察布市| 专栏| 青冈县| 扎鲁特旗| 班玛县| 衡阳县| 金川县| 普兰县|