你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 詳解iOS開辟中app的歸檔和偏好設置的存儲方法

詳解iOS開辟中app的歸檔和偏好設置的存儲方法

編輯:IOS開發綜合

IOS運用數據存儲方法(歸檔)

1、簡略解釋

在應用plist停止數據存儲和讀取,只實用於體系自帶的一些經常使用類型能力用,且必需先獲得途徑絕對費事;
偏好設置(將一切的器械都保留在統一個文件夾上面,且重要用於存儲運用的設相信息)
歸檔:由於前二者都有一個致命的缺點,只能存儲經常使用的類型。歸檔可以完成把自界說的對象寄存在文件中。
2、代碼示例

1.文件構造

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615462364.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.打印後果和兩個主要的毛病提醒

點擊保留按鈕和讀取按鈕,勝利打印成果以下:

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615462361.png (882×137)

關於不完成兩個協定辦法的毛病提醒:
-(void)encodeWithCoder:(NSCoder *)aCoder辦法:

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615462344.png (429×303)

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

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615462354.png (427×283)

3、繼續類中的應用

新建一個先生類,讓這個類繼續自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

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615462350.png (879×179)

4、主要解釋

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運用數據存儲方法(偏好設置)
1、簡略引見

許多IOS運用都支撐偏好設置,好比保留用戶名、暗碼、字體年夜小等設置,iOS供給了一套尺度的處理計劃來為運用參加偏好設置功效

每一個運用都有個NSUserDefaults實例,經由過程它來存取偏好設置。好比,保留用戶名、字體年夜小、能否主動登錄

存儲地位:

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615462369.png (319×120)

存儲情勢:

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615462319.png (340×180)

2、代碼示例

1.storyboard

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615462341.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.點擊保留數據,讀取數據按鈕打印以下

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615462328.png (440×109)

3、彌補解釋

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,保留(讀取)數據

【詳解iOS開辟中app的歸檔和偏好設置的存儲方法】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved