1. 程式人生 > >iOS 使用NSUserDefaults存取頭像

iOS 使用NSUserDefaults存取頭像

本文將實現功能:
在應用的個人設定頁面從相簿或者拍照獲取一張頭像,並將這張頭像照片儲存在nsuserdefaults中,返回到了個人中心頁面後,再從nsuserdefaults取出該頭像顯示在頁面。

  • 顯示拍照/從相簿選擇的UIAlertController,讓使用者選擇某種獲取頭像的方式
#pragma mark 更換頭像點選
-(void)userIconChange{
    UIAlertController *actionSheetController = [UIAlertController alertControllerWithTitle:@"更換頭像" message:@"拍照或從相簿中選擇"
preferredStyle:UIAlertControllerStyleActionSheet]; [actionSheetController addAction:[UIAlertAction actionWithTitle:@"拍照" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { [self takePhoto]; }]]; [actionSheetController addAction:[UIAlertAction actionWithTitle:@"開啟相簿"
style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) { [self LocalPhoto]; }]]; [actionSheetController addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { }]]; [self presentViewController:actionSheetController animated:YES
completion:^{ }]; }
  • 分別實現拍照方式和從相簿選擇方式的回撥方法如下:
/**
 *  從相簿選擇照片
 */
-(void)LocalPhoto
{
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];

    /* 資源型別為圖片庫 */
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    picker.delegate = self;

    /* 設定選擇後的圖片可被編輯 */
    picker.allowsEditing = YES;
    [self presentViewController:picker animated:YES completion:^{


    }];
}
/**
 *  拍照
 */
-(void)takePhoto
{
    /* 資源型別為照相機 */
    UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera;

    UIImagePickerControllerQualityType qualityType = UIImagePickerControllerQualityTypeHigh;
    /* 判斷是否有相機 */
    if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera])
    {
        UIImagePickerController *picker = [[UIImagePickerController alloc] init];
        picker.delegate = self;

        /* 設定拍照後的圖片可被編輯 */
        picker.allowsEditing = YES;

        /* 資源型別為照相機 */
        picker.sourceType = sourceType;

        /* 品質為高 */
        picker.videoQuality = qualityType;
        [self presentViewController:picker animated:YES completion:^{


        }];
    }
    else
    {
        NSLog(@"該裝置無攝像頭");
    }
}
  • 然後實現兩種方式都會執行的回撥方法,在該回調方法中做3件事,第一是將獲取到的image轉換成data,第二是將該data儲存在nsuserdefaults中方便下次獲取,第三是將該image顯示在當前頁面。該回調方法如下:
/**
 *  影象選取器的委託方法,選完圖片後回撥該方法
 */
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo{

    /* 當圖片不為空時顯示圖片並儲存圖片 */
    if (image != nil)
    {
        /* 圖片顯示在介面上 */
        // [_iconButton setBackgroundImage:image forState:UIControlStateNormal]; // 顯示在按鈕上

        /* 以下是儲存檔案到沙盒路徑下 */
        /* 把圖片轉成NSData型別的資料來儲存檔案 */
        NSData *data;

        /* 判斷圖片是不是png格式的檔案 */
        if (UIImagePNGRepresentation(image))
        {
            /* 返回為png影象 */
            data = UIImagePNGRepresentation(image);
        }
        else
        {
            /* 返回為JPEG影象 */
            data = UIImageJPEGRepresentation(image, 1.0);
        }

         /* 儲存 */
        [LoginState saveUserInfoToUserdefaults:UserHeadImage andInfo:data];
//        將圖片顯示在介面上
        _headImage = [UIImage imageWithData:data];
        [self.tableView reloadData];

    }
    /* 關閉相簿介面 */
    [picker dismissViewControllerAnimated:YES completion:^{


    }];
}
  • 然後,在上一步中儲存用到的[LoginState saveUserInfoToUserdefaults:UserHeadImage andInfo:data];方法是一個需要自己實現的類方法,我定義在了工具類LoginState中,具體實現如下:
/**
 * 儲存指定型別使用者資訊到userDefaults
 */
+(void)saveUserInfoToUserdefaults:(InfoTypeIndex)type andInfo:(NSObject *)userInfo{
    //        使用NSUserDefaults來儲存使用者資料
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    switch (type) {
        case UserHeadImage:
            [userDefaults setObject:userInfo forKey:@"UserHeadImage"];
            break;
        case UserName:
            [userDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:userInfo] forKey:@"UserName"];
            break;
        default:
            break;
    }
    [userDefaults synchronize];
}
/**
 * 取出指定型別使用者資訊到userDefaults
 */
+(NSObject *)takeUserInfoToUserdefaults:(InfoTypeIndex)type{
    //        使用NSUserDefaults來儲存使用者資料
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    NSData *infoData;
    NSObject *userInfo;
    switch (type) {
        case UserHeadImage:
            infoData = [userDefaults dataForKey:@"UserHeadImage"];
            userInfo = [UIImage imageWithData:infoData];
            break;
        case UserName:
            infoData = [userDefaults dataForKey:@"UserName"];
            userInfo = [[NSString alloc] initWithData:infoData encoding:NSUTF8StringEncoding];
            break;
        default:
            break;
    }

    return userInfo;
}
  • 當下次調到需要顯示頭像的頁面的時候,只要這樣呼叫就可以獲取到頭像了:
UIImage *head = (UIImage *)[LoginState takeUserInfoToUserdefaults:UserHeadImage];
  • 由於是公司的應用,這裡不方便附上效果圖。這裡把我這裡用到的LoginState工具類上傳,方便大家下載直接使用。寫文章不易,但更難得的是分享的精神,如果覺得好,請給本文點個贊,Thanks a lot~
    以下是csdn下載連結:
    http://download.csdn.net/detail/u012320459/9574431

相關推薦

iOS 使用NSUserDefaults存取頭像

本文將實現功能: 在應用的個人設定頁面從相簿或者拍照獲取一張頭像,並將這張頭像照片儲存在nsuserdefaults中,返回到了個人中心頁面後,再從nsuserdefaults取出該頭像顯

OC資料儲存本地(一)-----iOS----NSUserDefaults 儲存 清空

具體來說NSUserDefaults是iOS系統提供的一個單例類(iOS提供了若干個單例類),通過類方法standardUserDefaults可以獲取NSUserDefaults單例 常見到的輕量

iOS NSUserdefaults

一、NSUserDefaults簡介 1、NSUserDefaults是資料持久化的一種,可以將少量的資料儲存在本地。其本質是將資料記錄在plist檔案中,當應用被刪除,plist檔案相應的會被刪除,資料也就不存在了。 2、NSUserDefaults是系統

iOS: NSUserDefaults 要注意的地方 尤其首次設定預設值的方法

NSUserDefaults用於儲存一些app setting。當你關閉app之後再開啟後,之前儲存的setting依然可以從NSUserDefaults裡讀取。注意:密碼最好不要儲存在NSUserDefaults裡,要儲存也必須用AES/DES加密儲存,更安全的方法是

ios NSUserDefaults 存資料

//1.獲取NSUserDefaults檔案 NSUserDefaults *userDefaults=[NSUserDefaults standardUserDefaults]; //2.向檔案中寫入內容 [userDefaults setObject:@"大屁股"

iOS NSUserDefaults刪除全部記錄或刪除指定記錄

hihi,勇敢的小夥伴兒們你們好。小女不才,之前一直不知道NSUserDefaults刪除全部記錄的操作,因為發現一個小問題,所以才看到了這樣的一段程式碼。NSString *appDomain = [[NSBundle mainBundle] bundleIdentifie

IOS-------------NSUserDefaults standardUserDefaults的使用

本地儲存資料簡單的說有三種方式:資料庫、NSUserDefaults和檔案。 NSUserDefaults用於儲存資料量小的資料,例如使用者配置。並不是所有的東西都能往裡放的,只支援:NSString,NSNumber, NSDate, NSArray, NSDictio

iOS NSUserDefaults簡介及使用

NSUserDefaults類提供了一個與預設系統進行互動的程式設計介面。NSUserDefaults物件是用來儲存,恢復應用程式相關的偏好設定,配置資料等等。預設系統允許應用程式自定義它的行為去迎合使用者的喜好。你可以在程式執行的時候從使用者預設的資料庫中讀取程式的

iOS NSUserDefaults使用報錯問題

1.NSUserDefaults插入報錯attempt to insert non-property list object 在使用NSUserDefaults的時候插入資料有時候會報以下錯誤: *** Terminating app due to un

IOS NSUserDefaults檔案在哪

模擬器環境下 1.ios8.0以下 NSUserDefaults檔案位置 /Users/xxx/Library/Developer/CoreSimulator/Devices/0782D847-E13E-443A-9FA5-DD34DDA1732A/data/Appl

iOS NSUserDefaults setObject forKey,本地化儲存,刪除字典中的null,空值,本地化的時候,如果value為空值所引起的崩潰

刪除字典中的null 我們在處理伺服器傳過來的資料過程中,如果資料中出現null,我們是沒法進行本地持久化處理的。在使用NSUserDaults儲存本地時,如果其中一個欄位的value為NULL值,就會出現崩潰。 null產生原因 null是後臺在處理資料的時候,如

iOS開發——定制圓形頭像與照相機圖庫的使用

agen dem gen 聲明 rom 觀察者 sof one picker 如今的App都很流行圓形的頭像,比方QQ右上角的頭像,今日頭條的頭像等等。這已經成為App設計的趨勢了。今天我們就來簡單實現一下這個功能,我還會把從手機拍照中或者圖庫中取出作為頭

iOS 裁剪圓形圖像並顯示(類似於微信頭像)

ios 圓形頭像 裁剪 圓形 本文主要講解如何從照片庫選擇一張照片後將其裁剪成圓形頭像並顯示,類似於微信頭像那種模式。 本文的方法也適用於當時拍照獲取的圖像,方法類似,所以不再贅述。 本文主要是在iOS 10環境下使用,此時如果要使用使用系統照片庫、照相機等功能需要授權

iOS 之持久化儲存 plist、NSUserDefaults、NSKeyedArchiver、資料庫

1.什麼是持久化? 本人找了好多文章都沒有找到滿意的答案,最後是從孫衛琴寫的《精通Hibernate:Java物件持久化技術詳解》中,看到如下的解釋,感覺還是比較完整的。摘抄如下:  狹義的理解: “持久化”僅僅指把域物件永久儲存到資料庫中;廣義的理解,“持久化”包括和資料庫相關的各種操作。&n

iOS調取本地相簿更換頭像

把調取相簿獲取圖片與controller分離開,寫成一個單獨的類,在這裡命名為NOVSelectPhotoManager .h檔案中 //宣告一個協議NOVSelectPhotoManagerDeleagte @protocol NOVSelectPhotoManagerDeleagte <

iOS塗色塗鴉效果、Swift仿喜馬拉雅FM、抽屜轉場動畫、拖拽頭像、標籤選擇器等原始碼

iOS精選原始碼 iOS優質部落格 WKWebView是蘋果在iOS 8之後推出的框架WebKit中的瀏覽器控制元件, 其載入速度比UIWebView快了許多, 但記憶體佔用率卻下降很多, 也解決了載入網頁時的記憶體洩露問題. 現在的專

iOS CSV格式存取

逗號分隔值(Comma-Separated Values,CSV,有時也稱為字元分隔值,因為分隔字元也可以不是逗號),其檔案以純文字形式儲存表格資料(數字和文字)。純文字意味著該檔案是一個字元序列,不含必須像二進位制數字那樣被解讀的資料。CSV檔案由任意數目的記錄組成,記錄間

iOS兩種方法刪除NSUserDefaults所有記錄

//方法一 NSString *appDomain = [[NSBundlemainBundle] bundleIdentifier];[[NSUserDefaults standardUser

iOS--使用NSUserDefaults儲存自定義模型資料

我們都用過NSUserDefaults來儲存資料,它是一個單例,在整個程式中只有一個例項物件,他可以用於資料的永久儲存,當我們只用來儲存登入的一些ID等資訊的時候,就沒必要搭建資料庫來儲存了,用NSUserDefaults就夠了,非常簡單實用,不必繁瑣的SQL語句,這也是大家

IOSNSUserDefaults的用法(輕量級本地資料儲存)

NSUserDefaults適合儲存輕量級的本地資料,比如要儲存一個登陸介面的資料,使用者名稱、密碼之類的,個人覺得使用NSUserDefaults是首選。下次再登陸的時候就可以直接從NSUserDefaults裡面讀取上次登陸的資訊咯。 因為如果使用自己建立的plist檔