[MISS静IOS开发原创文摘]-AppDelegate存储全局变量和 NSUserDefaults standardUserDefaults 通过模型保存和读取数据,存储自定义的对象

时间:2022-02-06 03:03:50

由于app开发的需求,需要从api接口获得json格式数据并保存临时的 app的主题颜色 和 相关url

方案有很多种:

1, 通过AppDelegate保存为全局变量,再获取

2,使用NSUSerDefault

第一种 :通过AppDelegate方法:

定义全局变量

//
// AppDelegate.h
//
// Created by MISSAJJ on 15/5/5.
// Copyright (c) 2015年 MISSAJJ. All rights reserved.
// #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate > @property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) NSString *globalAppThemeColor;
@property (strong, nonatomic) NSString *globalAboutTag; @end

在AppDelegate.m 内赋值:

_globalAppThemeColor = appDetails.appThemeColor;
_globalAboutTag = appDetails.about;

在需要的VC头部导入

#import "AppDelegate.h"

- (void)viewDidLoad {
[super viewDidLoad]; //创建
AppDelegate * appDelegate=(AppDelegate*)[[UIApplication sharedApplication]delegate]; } 

获得变量

NSString *about = appDelegate.globalAboutTag;
NSString *theme = appDelegate.globalAppThemeColor;

灵活运用到代码需求的地方

//navi设置为全局主题色
self.navigationController.navigationBar.barTintColor = [UIColor colorWithHexString:appDelegate.globalAppThemeColor alpha:];

====== I am 华丽丽的分割线 ^_^=======

第二种 :通过NSUserDefaults方法:

查找了相关资料,自己整理了一份NSUserDefaults文摘给有共同有需求的程序猿朋友们.

一  ,NSUserDefaults 简单的运用方法

NSUserDefaults一般可以存取一些短小的信息,比如存入再读出一个字符串到NSUserDefaults

注意 : key值必须要相同才能读取出来哦!

NSUserDefaults只支持: NSString, NSNumber, NSDate, NSArray, NSDictionary,  不是所有数据都能往里放滴哦~

//存储数据

NSString *string = [NSString stringWithString @"我想存储的字符串内容"];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:string forKey:@"theme"];
//在存储数据的地方,别忘了这一句
[[NSUserDefaults standardUserDefaults] synchronize]; //在需要的地方获取数据
NSString *getStringValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"theme"];

二 , 如果需要保存比较多得数据, 可以通过模型保存和读取

1.模型代码

//
// AreasModel.h
////
// Created by MISSAJJ on 15/5/7.
// Copyright (c) 2015年 MISSAJJ. All rights reserved.
// #import <Foundation/Foundation.h> @interface AreasModel : NSObject /*
* about 模型
*/
@property (nonatomic,copy)NSString * about;
@property (nonatomic,copy)NSString * appThemeColor; @end

记住必须要在 M 文件 里 写这两个方法

- (id) initWithCoder: (NSCoder *)coder

- (void) encodeWithCoder: (NSCoder *)coder

然后把该自定义的类对象编码到 NSData中,再从NSUserDefaults中进行读取。

//
// AreasModel.m
////
// Created by MISSAJJ on 15/5/7.
// Copyright (c) 2015年 MISSAJJ. All rights reserved.
// #import "AreasModel.h" @implementation AreasModel - (id)initWithCoder:(NSCoder *)aDecoder
{
if(self = [super init])
{
self.about = [aDecoder decodeObjectForKey:@"about"];
self.appThemeColor = [aDecoder decodeObjectForKey:@"appThemeColor"]; }
return self;
} - (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.about forKey:@"about"];
[aCoder encodeObject:self.appThemeColor forKey:@"appThemeColor"]; } @end

2. 存储数据的代码

//////////////////////////   
以上省略........
////////////////////////// //URL编码成UTF8
dirPath = [dirPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL * dirUrl = [NSURL URLWithString:dirPath];
NSMutableURLRequest * dirRequest = [NSMutableURLRequest requestWithURL:dirUrl];
NSData *dirJsonData = [NSURLConnection sendSynchronousRequest:dirRequest returningResponse:nil error:nil];
NSDictionary *dirListJsonData = [NSJSONSerialization JSONObjectWithData:dirJsonData options: error:nil];
NSDictionary* dicData = [dirListJsonData objectForKey:@"data"]; #pragma mark ====保存临时主题和关于信息====
NSString *about = [dicData objectForKey:@"about"];
NSString *theme = [dicData objectForKey:@"theme"]; //创建模型
AreasModel *themeAndAbout = [[AreasModel alloc] init];
themeAndAbout.about = about;
themeAndAbout.appThemeColor = theme; //保存数据,用归档保存到NSUserDefault
NSData *themeAndAboutData = [NSKeyedArchiver archivedDataWithRootObject:themeAndAbout];
[[NSUserDefaults standardUserDefaults] setObject:themeAndAboutData forKey:@"themeAndAbout"];
[[NSUserDefaults standardUserDefaults] synchronize];

3. 获取数据代码

//获得保存数据
NSData *getthemeAndAboutData = [[NSUserDefaults standardUserDefaults] objectForKey:@"themeAndAbout"]; //转成模型获取数据
AreasModel *getThemeAndAbout = [NSKeyedUnarchiver unarchiveObjectWithData:getthemeAndAboutData]; NSLog(@"%@,%@",getThemeAndAbout.appThemeColor, getThemeAndAbout.about);
 ====心灵和身体,总有一个在路上===
 ====只要还在路上,就不至于后退===
 
 
 
 
 

[MISS静IOS开发原创文摘]-AppDelegate存储全局变量和 NSUserDefaults standardUserDefaults 通过模型保存和读取数据,存储自定义的对象的更多相关文章

  1. 虚拟化(五):vsphere高可用群集与容错(存储DRS是一种可用于将多个数据存储作为单个数据存储群集进行管理的功能)

    vsphere高级功能需要vcenter server和共享存储的支持才能实现.vsphere的高级功能有 vmotion.storage vmotion.vsphere HA.vsphere DRS ...

  2. iOS开发——网络使用技术OC篇&amp&semi;网络爬虫-使用正则表达式抓取网络数据

    网络爬虫-使用正则表达式抓取网络数据 关于网络数据抓取不仅仅在iOS开发中有,其他开发中也有,也叫网络爬虫,大致分为两种方式实现 1:正则表达 2:利用其他语言的工具包:java/Python 先来看 ...

  3. iOS开发——高级技术精选OC篇&amp&semi;Runtime之字典转模型实战

    Runtime之字典转模型实战 如果您还不知道什么是runtime,那么请先看看这几篇文章: http://www.cnblogs.com/iCocos/p/4734687.html http://w ...

  4. iOS开发——网络实用技术OC篇&amp&semi;网络爬虫-使用java语言抓取网络数据

    网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...

  5. iOS开发学习-类似微信聊天消息中的电话号码点击保存到通讯录中的功能

    类似微信聊天消息中的电话号码点击保存到通讯录中的功能,ABAddress的实现在iOS9中是不能正常使用的,点击完成后,手机会非常的卡,iOS9之后需要使用Contact新提供的方法来实现该功能.快捷 ...

  6. IOS开发---菜鸟学习之路--(十二)-利用ASIHTTPRequest进行异步获取数据

    想要实现异步获取的话我这边了解过来有两个非常简单的方式 一个是利用ASIHTTPRequest来实现异步获取数据 另一个则是利用MBProgressHUD来实现异步获取数据 本章就先来讲解如何利用AS ...

  7. Android——配置文件的保存SharedPreferences进行数据存储

    很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友.对于软件配置参数的保存,如果是window软件通常我们会采用ini文件进行保存,如果 ...

  8. iOS开发技术分享(1)— iOS本地数据存储

    iOS开发技术分享(1)— iOS本地数据存储 前言: 我本是一名asp.net程序员,后来加入了iOS游戏开发队伍,到现在也有一年多的时间了.这一年来,每天都干到2.3点钟才睡觉,不为别的,只为了学 ...

  9. 【iOS开发-76】Private Contacts案例:导航控制器使用、数据传递、第三方类库使用、tableViewCell的加入删除、数据存储等

    (1)效果 (2)源码与第三方类库下载 http://download.csdn.net/detail/wsb200514/8155979 (3)总结 --导航控制器,能够直接用代码的push和pop ...

随机推荐

  1. Azure的负载均衡机制

    负载均衡一直是一个比较重要的议题,几乎所有的Azure案例或者场景都不可避免,鉴于经常有客户会问,所以笔者觉得有必要总结一下. Azure提供的负载均衡机制,按照功能,可以分为三种:Azure Loa ...

  2. Linux更改计算机名称

    1.修改:vim /etc/hosts 2.修改:vim /etc/sysconfig/network 3.重启:reboot 如不重启可以输入:hostname  新改的计算机名称,然后su

  3. 关于软件测试人员能力模型的建立&lpar;from知乎&rpar;

    转自: http://www.zhihu.com/question/20254092 测试思维方面:1.测试基础理论(测试流程.测试的基础知识)2.测试用例设计方法论(黑盒.白盒)3.软件质量体系(建 ...

  4. 慕课网《Android智能机器人&OpenCurlyDoubleQuote;小慕”的实现》项目上手操作与代码解读【2】

    前几天有点忙,一直没写第三方API是怎么调用的,今天我先介绍一下如何调用图灵机器人第三方API. 一.图灵机器人API的调用 首先登录图灵机器人官网首页http://www.tuling123.com ...

  5. C&num;根据汉字生成拼音首字母全称

    static void Main(string[] args) { string s = GetChineseSpell("周杰伦"); Console.WriteLine(s.T ...

  6. JavaScript中的事件处理程序

    JavaScript和HTML之间的交互是通过事件实现的.事件,就是文档或者浏览器窗口中发生的一些特定的交互瞬间.可以使用事件处理程序来预订事件,以便在事件发生的时候执行响应的代码.这种观察者模式的模 ...

  7. 数据结构与算法(C&sol;C&plus;&plus;版)【绪论&sol;线性表】

    声明:数据结构与算法系列博文参考了<天勤高分笔记>.<王道复习指导>.C语言中文网.非商业用途,仅为学习笔记总结! 第一章<绪论> 一.基本概念及入门常识  /// ...

  8. Hadoop问题:启动hadoop 2&period;6遇到的datanode启动不了

    问题描述:第一次启动输入jps都有,第二次没有datanode 日志如下: 查看日志如下: -- ::, INFO org.mortbay.log: Started HttpServer2$Selec ...

  9. 基于嵌入式操作系统VxWorks的多任务并发程序设计(1)&horbar;&horbar;基本概念

    1引言 嵌入式系统定义义为:嵌入到对象体系中的专用计算机系统."嵌入性"."专用性"与"计算机系统"是嵌入式统的三个基本要素,对象系统则是指 ...

  10. 无法启动mysql服务”1067 进程意外终止”解决办法【简记】

    本文章主要是总结了各种导致mysql提示无法启动MYSQL服务”1067 进程意外终止”的一些解决办法,有碰到mysql无法启动的同学可尝试参考. 在win7的服务器里开启MySql服务提示“wind ...