iOS SDK: 使用NSUserDefaults

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 06:55 点击:

本文展示如何使用NSUserDefaults类存储和改变应用程序设置。我们将创建Contact应用程序用于存放用户指定的图片和联系人信息。

什么是NSUserDefaults?
NSUserDefaults类用于保存应用程序设置和属性以及用户数据。例如,你可以存储用户在应用程序中使用的图片或默认颜色方案。这些对象存储在iOS所谓的“defaults系统”中。iOS的defaults系统在整个app中都是可用的,因此存放到defaults系统中的数据也是整个应用程序生命周期中可用的。也就是说,无论用户关闭程序还是关机,在用户再次打开程序或开机后这些数据仍然存在。NSUserDefaults可以存储的数据类型包括:

NSData
NSString
NSNumber
NSDate
NSArray
NSDictionary
如果你想保存其他类型,如UIImage,你应该进行编码(即archive),或者将它转换为NSData、NSNumber或者NSString。

现在,我们将通过一个简单的demo,开始学习如何使用defaults系统。

第 1 步: 创建项目
 

新建项目。选择View-based Application ,点击 Next。输入项目名称Contact。输入公司标识,Device Family选择iPhone。点击Next。选择文件保存位置,然后点击Create。

 

第 2 步: 设计界面
在ProjectNavigator的Contact文件夹下,选择ContactViewController.xib。拖入3个UITextFields到画布,如下图所示。拖入一个UIImageView和2个RoundRect Button。

选择第一个TextField,将Placeholder设置为FirstName。将第2个TextField的Placeholder设置为Last Name。将第3个TextField的Placeholder设置为Age,同时将keyboardtype设置为Number Pad。

第1个按钮的text设置为Save,第2个按钮的text设置为ChooseImage。

图片
 

 

现在,我们创建连接。点击Editor中间的按钮,显示Assistanteditor。

选择first name文本框,右键(CTRL+左键)拖到interface声明部分,将弹出一个popup窗口,在name中输入firstNameTextField,然后点击connect。

图片 


以同样的方式为Lastname、Age文本框和UIImageView创建连接,分别是:lastNameTextField、ageTextField和contactImageView。

对于按钮,我们需要创建Action而不是Outlet。从保存按钮右键拖一条线到interface声明部分,但这次我们要拖在花括号以外。将Connection改为Action(不是Outlet)并在name中输入save。同样,为ChooseImage按钮创建Action连接,name为chooseImage。现在,ContactViewController.h代码将如下所示:

 
 #import <UIKit/UIKit.h>

 

@interface ContactViewController : UIViewController {

 

    IBOutlet UIImageView *contactImageView;

    IBOutlet UITextField *firstNameTextField;

    IBOutlet UITextField *lastNameTextField;

    IBOutlet UITextField *ageTextField;

}

 

- (IBAction)save:(id)sender;

- (IBAction)chooseImage:(id)sender;

 

@end
 

接下来,点击Build andRun。输入一些文本并退出程序。如果再次打开程序,你回发现你输入的文本仍然存在。这不过iOS的“多任务”特性而已。如果你从多任务栏中删除程序图标,再次启动程序,你会发现你输入的文本不见了。在本文,我们会使用NSUserDefaults保存你输入的信息,哪怕你“真的”退出了程序。这些数据能够在多个会话中存在。

第 3 步: 挑选图片
返回standardEditor模式,以释放出更多的空间。打开ContactViewController.h,加入UIImagePickerControllerDelegate和UINavigationControllerDelegate协议。

 
 <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
 

打开ContactViewController.m,在chooseImage:方法中加入代码:

 - (IBAction)chooseImage:(id)sender

{

    UIImagePickerController *picker = [[[UIImagePickerController alloc] init] autorelease];

    picker.delegate = self;

    picker.allowsEditing = YES;

    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

    [self presentModalViewController:picker animated:YES];

}
 

首先,我们创建了一个UIImagePickerController,然后将它的delegate设置为self

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Lexical or Preprocessor Issue 'xxx.h
    • ios学习笔记(二)xcode 4.3.2下实现基本交互
    • ios版本的helloworld
    • iphone(object-c) 内存管理(3) 有效的内存管理 前半部分
    • ios学习笔记(一)xcode 4.3.2下创建第一个ios项目
    • IOS类似iphone通讯录TableView的完整demo【附源码】
    • UITableView一些方法
    • [iPhone中级]iPhone团购信息客户端的开发 (二)
    • iphone(object-c)内存管理(1)
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1