iOS 本地数据存储(一)
2015-10-05 09:26
543 查看
本地数据存储之UserDefaults
UserDefaults支持的基本数据类型包含:
or
对于自定义的类,如果直接存储会出现如下错误:
Property list invalid for format (property lists cannot contain objects
of type ‘CFType’)
如果想存储自定义的类,需要对其进行编码即转换为基本数据类型。
类定义,以及转换为NSDictionary类型:
[cpp] view
plaincopyprint?
@interface XYZToDoItem : NSObject
@property NSString *itemName;
@property BOOL completed;
//@property (readonly) NSDate *creationDate;
@property NSDate *creationDate;
- (NSDictionary *) encodedItem;
@end
[cpp] view
plaincopyprint?
</pre><pre name="code" class="cpp">@implementation XYZToDoItem
#pragma Used for encoded objects to be able to save to UserDeafaults
- (NSDictionary *) encodedItem
{
return [NSDictionary dictionaryWithObjectsAndKeys:self.itemName, @"itemName",
[NSNumber numberWithBool:self.completed], @"completed",
self.creationDate , @"creationDate", nil];
}
@end
调用的地方,存储如UserDefault里,并且读取转换为相应的类:
[objc] view
plaincopyprint?
- (void) saveUserDefaultsOwn
{
XYZToDoItem *item1 = [[XYZToDoItem alloc] init];
item1.itemName = @"Buy milk";
//[self.toDoItems addObject:item1];
XYZToDoItem *item2 = [[XYZToDoItem alloc] init];
item2.itemName = @"Buy eggs";
//[self.toDoItems addObject:item2];
XYZToDoItem *item3 = [[XYZToDoItem alloc] init];
item3.itemName = @"Read a book";
//[self.toDoItems addObject:item3];
NSUserDefaults *userdefaults = [NSUserDefaults standardUserDefaults];
[userdefaults setObject:[item1 encodedItem] forKey:@"item1"];
[userdefaults setObject:[item2 encodedItem] forKey:@"item2"];
[userdefaults setObject:[item3 encodedItem]forKey:@"item3"];
[userdefaults synchronize];
}
- (void) readUserDeafultsOwn
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSDictionary *dic1 = [[NSDictionary alloc] init];
dic1 = [userDefaults objectForKey:@"item1"];
XYZToDoItem *item1 = [[XYZToDoItem alloc] init];
item1.itemName = [dic1 objectForKey:@"itemName"];
item1.completed = [dic1 objectForKey:@"completed"];
item1.creationDate = [dic1 objectForKey:@"creationDate"]; //initial it is readonly, not right
dic1 = [userDefaults objectForKey:@"item2"];
XYZToDoItem *item2 = [[XYZToDoItem alloc] init];
item2.itemName = [dic1 objectForKey:@"itemName"];
item2.completed = [dic1 objectForKey:@"completed"];
item2.creationDate = [dic1 objectForKey:@"creationDate"]; //initial it is readonly, not right
dic1 = [userDefaults objectForKey:@"item2"];
XYZToDoItem *item3 = [[XYZToDoItem alloc] init];
item3.itemName = [dic1 objectForKey:@"itemName"];
item3.completed = [dic1 objectForKey:@"completed"];
item3.creationDate = [dic1 objectForKey:@"creationDate"]; //initial it is readonly, not right
//XYZToDoItem *item2 = [userDefaults objectForKey:@"item2"];
//XYZToDoItem *item3 = [userDefaults objectForKey:@"item3"];
[self.toDoItems addObject:item1];
[self.toDoItems addObject:item2];
[self.toDoItems addObject:item3];
}
综上为简单的对复杂的类进行简单封装并且读取的例子。
[参考:http://82apps.tumblr.com/post/11989743237/adding-turn-based-multiplayer-in-ios-5-part-3]
UserDefaults支持的基本数据类型包含:
NSData,
NSString,
NSNumber,
NSDate,
NSArray,
or
NSDictionary
对于自定义的类,如果直接存储会出现如下错误:
Property list invalid for format (property lists cannot contain objects
of type ‘CFType’)
如果想存储自定义的类,需要对其进行编码即转换为基本数据类型。
类定义,以及转换为NSDictionary类型:
[cpp] view
plaincopyprint?
@interface XYZToDoItem : NSObject
@property NSString *itemName;
@property BOOL completed;
//@property (readonly) NSDate *creationDate;
@property NSDate *creationDate;
- (NSDictionary *) encodedItem;
@end
[cpp] view
plaincopyprint?
</pre><pre name="code" class="cpp">@implementation XYZToDoItem
#pragma Used for encoded objects to be able to save to UserDeafaults
- (NSDictionary *) encodedItem
{
return [NSDictionary dictionaryWithObjectsAndKeys:self.itemName, @"itemName",
[NSNumber numberWithBool:self.completed], @"completed",
self.creationDate , @"creationDate", nil];
}
@end
调用的地方,存储如UserDefault里,并且读取转换为相应的类:
[objc] view
plaincopyprint?
- (void) saveUserDefaultsOwn
{
XYZToDoItem *item1 = [[XYZToDoItem alloc] init];
item1.itemName = @"Buy milk";
//[self.toDoItems addObject:item1];
XYZToDoItem *item2 = [[XYZToDoItem alloc] init];
item2.itemName = @"Buy eggs";
//[self.toDoItems addObject:item2];
XYZToDoItem *item3 = [[XYZToDoItem alloc] init];
item3.itemName = @"Read a book";
//[self.toDoItems addObject:item3];
NSUserDefaults *userdefaults = [NSUserDefaults standardUserDefaults];
[userdefaults setObject:[item1 encodedItem] forKey:@"item1"];
[userdefaults setObject:[item2 encodedItem] forKey:@"item2"];
[userdefaults setObject:[item3 encodedItem]forKey:@"item3"];
[userdefaults synchronize];
}
- (void) readUserDeafultsOwn
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSDictionary *dic1 = [[NSDictionary alloc] init];
dic1 = [userDefaults objectForKey:@"item1"];
XYZToDoItem *item1 = [[XYZToDoItem alloc] init];
item1.itemName = [dic1 objectForKey:@"itemName"];
item1.completed = [dic1 objectForKey:@"completed"];
item1.creationDate = [dic1 objectForKey:@"creationDate"]; //initial it is readonly, not right
dic1 = [userDefaults objectForKey:@"item2"];
XYZToDoItem *item2 = [[XYZToDoItem alloc] init];
item2.itemName = [dic1 objectForKey:@"itemName"];
item2.completed = [dic1 objectForKey:@"completed"];
item2.creationDate = [dic1 objectForKey:@"creationDate"]; //initial it is readonly, not right
dic1 = [userDefaults objectForKey:@"item2"];
XYZToDoItem *item3 = [[XYZToDoItem alloc] init];
item3.itemName = [dic1 objectForKey:@"itemName"];
item3.completed = [dic1 objectForKey:@"completed"];
item3.creationDate = [dic1 objectForKey:@"creationDate"]; //initial it is readonly, not right
//XYZToDoItem *item2 = [userDefaults objectForKey:@"item2"];
//XYZToDoItem *item3 = [userDefaults objectForKey:@"item3"];
[self.toDoItems addObject:item1];
[self.toDoItems addObject:item2];
[self.toDoItems addObject:item3];
}
综上为简单的对复杂的类进行简单封装并且读取的例子。
[参考:http://82apps.tumblr.com/post/11989743237/adding-turn-based-multiplayer-in-ios-5-part-3]
相关文章推荐
- iOS新手————沙盒的解释
- 【IOS 开发学习总结-OC-31】★★OC之foundation 框架——字典(NSDictionary 与 NSMutableDictionary)
- iOS开发之程序间通信
- Xcode模拟器中无法播放音频文件的原因分析
- iOS开发系列--打造自己的“美图秀秀”
- iOS编程-------target/action设计模式 / 代理设计模式
- iOS字典数组,把每个字典对象转成一个模型对象
- FMDB事务批量更新——IOS笔记
- 几种常用的ios设计模式
- iOS多线程之NSOperation
- IOS文章导航
- iOS动画加载图片
- iOS oc加载plist数据
- 【iOS开发】单例模式设计(ARC & MRC)
- iOS开发-- 开发中遇到的问题汇总
- iOS控件的缩放,平移,旋转和回到原点
- iOS 转场动画等
- iOS按钮的使用和动画的实现
- AVAudioSession
- 移动设备上音频文件不能播放怎么办?