2015年6月9日 星期二

[iOS] 如何儲存使用者設定?(NSUserDefaults) / 類似Android的SharedPreferences

相信大家寫的app如果有登入之類的東西一定會遇到一個問題,就是儲存使用者設定!

不然每次叫使用者重新輸入應該會崩潰吧?!


--------------------------------------------------------------------------------------------------------------------------


正文開始:

Step1:

先到.h檔 (看是appdelegate.h or ViewController.h)

宣告一個NSUserDefaults屬性的變數

//
//  AppDelegate.h
//
//  Created by daniel on 2015/4/29.
//  Copyright (c) 2015 daniel. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "AsyncUdpSocket.h"
#define global ((AppDelegate *)[[UIApplication sharedApplication] delegate])

@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
    NSUserDefaults *userDefaults;

}

這樣我們就可以在.m file內使用該變數(userDefaults)



Step2:

在.m file內的viewdidload()這裡面(反正就是第一個讀到的地方)

先初始化我們的userDefaults,這一部很重要!!沒有初始化會叫不出儲存的東西!!

初始化:userDefaults = [NSUserDefaults standardUserDefaults];

接下來就是儲存/讀取

儲存:

    NSString *string = @"192.168.0.1";
    [userDefaults setObject:string forKey:@"store IP"];

    NSArray *array = @[@"123",@"456"];
    [userDefaults setObject:array forKey:@"Array"];

    BOOL isValid = YES;
    [userDefaults setBool: isValid forKey:@"isValid"];

    int number = 100;
    [userDefaults setInteger:number forKey:@"number"];

可以看到上述四種不同的類型(nsstring,nsarray,BOOL,int)

大致上都是一樣的,差別只是在於setXXX(類型)

格式:(儲存)

[NSUserDefaults型態變數  setObject(或其他型態): 變數名稱 forKey: @"隨意取key 名稱"]

格式:(讀取)

[NSUserDefaults型態變數 stringforKey: @"隨意取key 名稱"]

(或是valueforKey:)

範例:NSString *store_ip = [userDefaults stringForKey:@"store IP"];


*****非常重要*****

在儲存完畢以後,要記得!!

[NSUserDefaults型態變數 synchronize];

如果沒有這行,就不會真正儲存到硬碟裡面!

完成以後,就可以透過這樣的方式來儲存使用者設定了:)

END