iOS經過NSUserDefaults實現簡單的應用間數據傳遞

iOS中NSUserDefaults詳解

NSUserDefaults是用於保存應用程序設置,應用信息等輕量級數據的的一個類,其本質是將數據寫爲plist文件的形式保存在本地。在IOS中,系統爲每個應用程序都默認建立了一個NSUserDefaults對象。數組

1、經常使用方法總結

 

+ (NSUserDefaults *)standardUserDefaults;安全

獲取系統默認建立的應用程序設置表網絡

 

+ (void)resetStandardUserDefaults;dom

這個方法用於將默認的UserDefaults釋放掉,並在下次使用時建立一個新的對象,須要注意的是,調用這個方法後,對原UserDefaults單例進行的KVO監聽將失效。ui

 

- (instancetype)initWithSuiteName:(NSString *)suitename;url

這個方法建立一個新的域:根據名字能夠建立一些不一樣的域,分別存儲幾套設置信息。spa

 

- (id)objectForKey:(NSString *)defaultName;操作系統

- (void)setObject:(id)value forKey:(NSString *)defaultName;.net

- (void)removeObjectForKey:(NSString *)defaultName;3d

上面三個方法是對對象存儲進行的操做,分別是存儲,獲取和刪除。

- (NSString *)stringForKey:(NSString *)defaultName;

獲取字符串數據

- (NSArray *)arrayForKey:(NSString *)defaultName;

獲取數組數據

- (NSDictionary *)dictionaryForKey:(NSString *)defaultName;

獲取字典數據

- (NSData *)dataForKey:(NSString *)defaultName;

獲取data數據

- (NSArray *)stringArrayForKey:(NSString *)defaultName;

獲取字符串數組數據

- (NSInteger)integerForKey:(NSString *)defaultName;

獲取整型數據

- (float)floatForKey:(NSString *)defaultName;

獲取浮點型數據

- (double)doubleForKey:(NSString *)defaultName;

獲取雙精度浮點型數據

- (BOOL)boolForKey:(NSString *)defaultName;

獲取布爾詩句

- (NSURL *)URLForKey:(NSString *)defaultName;

獲取網址數據

 

下面是一些對應的set方法

 

- (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;

- (void)setFloat:(float)value forKey:(NSString *)defaultName;

- (void)setDouble:(double)value forKey:(NSString *)defaultName;

- (void)setBool:(BOOL)value forKey:(NSString *)defaultName;

- (void)setURL:(NSURL *)url forKey:(NSString *)defaultName;

 

- (void)registerDefaults:(NSDictionary *)registrationDictionary;

這個方法能夠經過字典對數據表進行賦值

- (void)addSuiteNamed:(NSString *)suiteName;

添加一個域

- (void)removeSuiteNamed:(NSString *)suiteName;

移除一個域

 

- (NSDictionary *)dictionaryRepresentation;

返回系統設置的信息,也是NSGlobalDomain域中的信息。

 

@property (readonly, copy) NSArray *volatileDomainNames;

返回一個數組,其中是全部不穩定域的名字

 

- (NSDictionary *)volatileDomainForName:(NSString *)domainName;

根據名字獲取不穩定域中的數據

- (void)setVolatileDomain:(NSDictionary *)domain forName:(NSString *)domainName;

根據名字設置不穩定域

- (void)removeVolatileDomainForName:(NSString *)domainName;

根據名字移除不穩定域

 

- (NSDictionary *)persistentDomainForName:(NSString *)domainName;

根據名字獲取穩定域的數據

- (void)setPersistentDomain:(NSDictionary *)domain forName:(NSString *)domainName;

根據名字設置穩定域

- (void)removePersistentDomainForName:(NSString *)domainName;

根據名字移除穩定域

 

- (BOOL)synchronize;

對象的同步方法,將內存中的數據寫入磁盤。

 

- (BOOL)objectIsForcedForKey:(NSString *)key;

判斷某個鍵值的數據是否存在

- (BOOL)objectIsForcedForKey:(NSString *)key inDomain:(NSString *)domain;

判斷某個域中某個鍵值的數據是否存在

 

注:目前的iOS版本已經不能經過下面的方法在應用間進行傳值!!!

 

2、三個特殊的域及實現簡單的應用間信息傳遞

咱們應該瞭解到,在IOS中,由於沙盒模式的存在,應用間是不容許互相訪問數據與傳值通訊的。這樣作的好處顯而易見:

一、保證了數據的安全性

二、數據的管理更加簡潔

三、當咱們刪除數據時,只須要將沙盒刪除。

在某些需求下,咱們可能會須要應用程序間的傳值與通訊,固然除了經過網絡外,對於很是小的數據量,好比驗證另外一應用從程序是否登陸,是否安裝而且開啓過一次,咱們也能夠經過NSUserDefaults的一個全局的數據表來實現。

NSUserDefaults的三個特殊的系統域以下:

 

NSString * const NSGlobalDomain;

這個是一個系統級別的全局的域,存儲這系統配置信息,咱們能夠經過它實現應用程序間傳值

NSString * const NSArgumentDomain;

這個是在本應用程序內可訪問的域,存儲着應用程序的信息

NSString * const NSRegistrationDomain;

這個是存放臨時數據的域

代碼示例以下:

首先在第一個工程中,咱們寫以下代碼運運行一下:

    //獲取全局的域
    NSDictionary * dic = [[NSUserDefaults standardUserDefaults]persistentDomainForName:NSGlobalDomain];
    NSMutableDictionary * temDic = [NSMutableDictionary dictionaryWithDictionary:dic];
    [temDic setObject:@"傳遞的值" forKey:@"應用1"];
    //重設
    [[NSUserDefaults standardUserDefaults]setPersistentDomain:temDic forName:NSGlobalDomain];
    //同步
    [NSUserDefaults resetStandardUserDefaults];
    NSLog(@"%@",dic);

打印的結果是許多系統信息。

在第二個工程中,咱們這樣作:

 NSDictionary * dic = [[NSUserDefaults standardUserDefaults]persistentDomainForName:NSGlobalDomain];
    NSLog(@"%@\n--------------\n%@=%@",dic,@"應用1",[dic objectForKey:@"應用1"]);

結果以下:

2015-05-06 15:48:49.897 321[4100:186745] {
    AppleITunesStoreItemKinds =     (
        newsstand,
        podcast,
        "itunes-u",
        artist,
        booklet,
        document,
        eBook,
        software,
        "software-update",
        "podcast-episode"
    );
    AppleLanguages =     (
        en,
        fr,
        de,
        "zh-Hans",
        "zh-Hant",
        ja,
        nl,
        it,
        es,
        "es-MX",
        ko,
        pt,
        "pt-PT",
        da,
        fi,
        nb,
        sv,
        ru,
        pl,
        tr,
        uk,
        ar,
        hr,
        cs,
        el,
        he,
        ro,
        sk,
        th,
        id,
        ms,
        "en-GB",
        "en-AU",
        ca,
        hu,
        vi,
        hi
    );
    AppleLocale = "en_US";
    MSVLoggingMasterSwitchEnabledKey = 0;
    "\U5e94\U75281" = "\U4f20\U9012\U7684\U503c";
}
--------------
應用1=傳遞的值

這樣,咱們就簡單實現了應用程序間的傳值,可是建議最好不要輕易操做系統的這個域。

專一技術,熱愛生活,交流技術,也作朋友。

——琿少 QQ羣:203317592

相關文章
相關標籤/搜索