[Object C]_[初級]_[NSUserDefaults在項目中的應用]

NSUserDefaults

       每個應用程序附帶了一組默認的工廠(數據存儲包)。當用戶編輯他或她缺省值,用戶設置的值和工廠默認值存儲在用戶的默認數據庫。因此,每次應用程序啓動時,你需要提醒工廠的缺省值。這個操作稱爲默認註冊。註冊後,您將使用用戶默認值對象來確定用戶想要的應用程序的行爲。這個過程稱爲閱讀和使用默認值。數據從數據庫用戶的默認值將自動讀取的文件系統。您還將創建一個首選項面板,將允許用戶設置默認值。更改默認值對象將自動寫入到文件系統。這個過程被稱爲設置默認值。

下面我們看一張圖片來更簡明瞭解NSUserDefaults的應用原理,工作流程圖如下:

流程圖主要說明在應用程序中用NSUserDefaults設置配置數據,NSUserDefaults把這些數據寫到文件系統上,~/Library/Preferences是存取NSUserDefaults的plist文件的目錄。也可以讀取NSUserDefaults來獲取之前設置的配置數據,進行啓動程序的時候用於加載某些操作。

場景:程序啓動時,保存應用程序上一次關閉之前的操作或者設置的一些選項數據。NSUserDefaults支持的數據類型:NSNumber(包括基本數據類型:NSUInteger,BooL,float,double),NSString,NSURL,NSdate,NSData,NSArray,NSDictionary,但是不支持自定義類型的對象。NSUserDefaults就是一個系統自帶的詞典庫,方便存數據和取數據。

下面看看示例代碼

// NSUserDefaults設置數據保存到磁盤的文件位置

// /Users/mac-d1/Library/Preferences/TestNSUserDefaults.plist

#import <Foundation/Foundation.h>

//爲應用程序註冊工廠默認值
void DoRegisterFactoryDefault()
{
    NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
    //基本數據類型
    [defaults setInteger:1 forKey:@"integer"];
    [defaults setBool:true forKey:@"bool"];
    [defaults setDouble:5.6487 forKey:@"double"];
    [defaults setFloat:1.20 forKey:@"float"];
    NSURL *url =[NSURL fileURLWithPath:@"/Users/mac-d1/Library/Preferences/TestNSUserDefaults.plist"];
    [defaults setURL:url forKey:@"url"];
    
    //數字類型
    [defaults setObject:[NSNumber numberWithBool:false] forKey:@"number-bool"];
    [defaults setObject:[NSNumber numberWithInteger:2] forKey:@"number-integer"];
    [defaults setObject:[NSNumber numberWithInt:3] forKey:@"number-int"];
    [defaults setObject:[NSNumber numberWithDouble:6.78485] forKey:@"number-double"];
    [defaults setObject:[NSNumber numberWithFloat:2.30] forKey:@"number-float"];
    
    [defaults setObject:@"hello world" forKey:@"string"];
    //當前系統的日期
     NSDate *date =[NSDate date];
    [defaults setObject:date forKey:@"date"];
    
    //詞典
    NSDictionary *dic =[NSDictionary dictionaryWithObjectsAndKeys:@"dic1",@"key1",@"dic2",@"key2",@"dic3",@"key3", nil];
    [defaults setObject:dic forKey:@"dic"];
    
    //數組
    NSArray *array =[NSArray arrayWithObjects:dic,@"array1",@"array2", nil];
    [defaults setObject:array forKey:@"array"];
    
    //NSData
    NSData *data =[@"NSData data" dataUsingEncoding:NSUTF8StringEncoding];
    [defaults setObject:data forKey:@"data"];
    
    //保存設置的數據到磁盤
    [defaults synchronize];
    
}

//讀取數據,改變方法和保存用戶的願望(即用戶想要實現的操作和界面反應的現象)
void ReadFactoryDefaultsToChangeOperater()
{
     NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
    
    //基本類型
    NSUInteger integer =[defaults integerForKey:@"integer"];
    BOOL boolValue =[defaults boolForKey:@"bool"];
    double doubleValue =[defaults doubleForKey:@"double"];
    float floatValue =[defaults floatForKey:@"float"];
    NSURL *url =[defaults URLForKey:@"url"];
    
    NSDate *date =[defaults objectForKey:@"date"];
    NSLog(@"\ninteger:%ld\n boolValue:%d\n doubleValue:%lf\n floatValue:%f\n url:%@\n date:%@",integer,boolValue,doubleValue,floatValue,[url path],date);
    
    //NSNumber
    NSNumber *integetNum=[defaults objectForKey:@"number-integer"];
    NSNumber *intNum=[defaults objectForKey:@"number-int"];
    NSNumber *boolNum=[defaults objectForKey:@"number-bool"];
    NSNumber *doubleNum=[defaults objectForKey:@"number-double"];
    NSNumber *floatNum=[defaults objectForKey:@"number-float"];
    
    NSLog(@"\n integetNum:%@\n intNum:%@\n boolNum:%@\n doubleNum:%@\n floatNum:%@\n",integetNum,intNum,boolNum,doubleNum,floatNum);
    //object
    NSString *str =[defaults objectForKey:@"string"];
    NSArray *array =[defaults objectForKey:@"array"];
    NSDictionary *dic =[defaults objectForKey:@"dic"];
    NSData *data =[defaults objectForKey:@"data"];
    NSString *dataStr =[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
     NSLog(@"\n str:%@\n array:%@\n dic:%@\n dataStr:%@\n",str,array,dic,dataStr);
}


int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        DoRegisterFactoryDefault();
        //ReadFactoryDefaultsToChangeOperater();
        
    }
    return 0;
}


執行方法ReadFactoryDefaultsToChangeOperater()後的結果:


我們再來看看plist文件的數據:



發佈了101 篇原創文章 · 獲贊 15 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章