iphone保存数据/选项的5种方法

来源:互联网 发布:办公室软件2003下载 编辑:程序博客网 时间:2024/06/10 23:11

一.NSUserDefaults (存在Library目录)
//Read:objectsForKey, intForKey, floatForKey, boolForKey
NSString *user = [[NSUserDefaults standardUserDefaults] objectForKey: "username"];

//Write:
[[NSUserDefaults standardUserDefaults] setObject:@"user1" forKey: "username"];
//1): set并没有立即写入, 可用synchornize方法强制马上写入磁盘
//2): 批量初始化
NSDictionary *defaultValues = [NSDictionary dictionaryWithObjectsAndKeys:
                                   @"zhouth", @"username", 
                                   nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];
[[NSUserDefaultsController sharedUserDefaultsController] setInitialValues:defaultValues];

二.属性列表 (存在Documents目录)
//read:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentPath = [paths objectAtIndex:0];
NSString *setFile = [documentPath stringByAppendingPathComponent:@"set.list"];

if ([[NSFileManager defaultManager] fileExistsAtPath:setFile]){
  NSArray *array = [[NSArray alloc] initWithContentsOfFile:setFile];
  NSString *user = [array objectAtIndex:0];
  [array release];
}
//write:
NSMutableArray *array = [NSMutableArray alloc] init];
[array addObject:user];
[array writeToFile:setFile atomically:YES];
[array release];

三.对象模型归档, 序列化到文件
(对象实现NSCoding, NSCopying协议)
//read:
NSData *data = [[NSMutableData alloc] initWithContentsOfFile:dataFile]];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
MyObject *myObject = [unarchiver decodeObjectForKey:@"MyObjectData"];
NSString *user = myObject.user;
[unarchiver finishDecoding];//finished, clear memory
[unarchiver release];
[data release];
//write:
NSMutableData *data = [[NSMutableData allow] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:myObject forKey:@"MyObjectData"];
[archiver finishEncoding];
[data writeToFile:dataFile atomically: YES];
[myObject release];
[archiver release];
[data release];

//MyObject
#import <UIKit/UIKit.h>
@interface MyObject:NSObject<NSCoding, NSCopying>
@property (nonatomic retain) NSString *user;
@end

#import "MyObject.h"
@implementation
@synthesize user;
- (void)encodeWithCoder:(NSCoder *)encoder{
 [encoder encodeObject: user forKey:@"username"];
}
- (void)initWithCoder:(NSCoder *)decoder{
if (self=[super init]){
  user = [[decoder decodeObjectForKey:@"username"] retain];//retain
}
return self;
}
- (id)copyWithZone:(NSZone *)zone{
MyObject copy = [[[self class] allocWithZone:zone] init];
copy.user = [[self.user copyWithZone:zone] autorelease]; //autorelease
return copy;
}

四. SQLite, 用C字符串, 非NSString
sqlite3 *database;
int result = sqlite3_open("../file", &database);//return SQLITE_OK
char *errorMsg;
const char *sql = [sqlNSString UTF8String]; //"create table....."
int result = sqlite3_exec(database, sql, NULL, NULL, &errorMsg);
.....
sqlite3_stmt *statement...
sqlite3_prepare_v2()...
sqlite3_step(statement)....
sqlite3_column_text()....
sqlite3_finalize(statement)....
sqlite3_close(database)....

五.Core Data
由xcode图形化实现数据结构, 数据也是存在sqlite

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 用手机账号登陆游戏换手机怎么办 在qq上被骗充q币怎么办 微信借钱后删了好友怎么办 财付通绑定了其它人的身份证怎么办 微信支付密码忘了没绑银行卡怎么办 微信没有绑银行卡忘记密码怎么办 威信解绑银行卡支付密码望了怎么办 买了个qq号绑定了财付通怎么办 淘宝买的东西下架了怎么办 微信红包充话费充错了怎么办 手机qq不能发红包或转账怎么办 qq给人发红包被骗了怎么办 qq发红包对方看不不到怎么办 手机浏览器支付页面弹不出来怎么办 新手机登录微信需要验证怎么办 手机淘宝注册账号换手机号后怎么办 冒充微信好友诈骗被骗了怎么办 刚刚激活的电信手机号码忘了怎么办 用手机充话费充错了怎么办 王者荣耀号丢了换成了别的号怎么办 微信给空号q币怎么办 qq密码被别人改了怎么办怎么登 qq刚改了密码忘了怎么办 qq密码忘了想改密码怎么办 qq账号和密码都忘了怎么办 我的微信被别人改了密码怎么办 微信被盗密码被改了怎么办 微信被盗了密码都被改了怎么办 微信被别人改密码改手机号了怎么办 微信号手机号码换了密码改了怎么办 电信充值卡的密码刮花了怎么办 qq充了q币不到账怎么办 开通黄钻不支持手机话费开通怎么办 银行卡给红包充值迟迟不到账怎么办 我想用信用卡往微信零钱充钱怎么办 修改密保手机跳过原手机验证怎么办 骏卡有用但是充不进去怎么办 在云南移动上充错话费了怎么办 手机版本太低安装不了支付宝怎么办 手机下载支付宝后找不到了怎么办 王者荣耀充值成功游戏未到账怎么办