您的位置:首页 > 移动开发 > IOS开发

粗糙的iOS笔记之数据存储

2014-02-19 13:20 411 查看
在ARC项目中导入MRC的类的时候需要在此类上面添加 -fno-objc-arc

Core Data是苹果自己的数据框架

优点:能管理中大型的数据结构

缺点:不能跨平台  只能在iOS和MacOS平台上使用

Core Data使用步骤

1)创建Core Data模板

2)在Core Data文件内增加实体

实体就是用于存储业务数据的类

3)根据实体生产实体类

1)生成的类都是继承NSManagedObject

      继承这个类是为了协助Core Data管理你这个对象

2)生成的类的.m文件内有@dynamic

     将来的getter setter不由OC语法本身决定

     而由Core Data自己实现

3)生成的类如果不勾选

基本数据类型会被NSNumber包装

注意:如果项目中用到了Core Data,在生成过实体对象之后运行过游戏,之后修改了实体对象,切记再次运行项目时删除模拟器中的应用数据

实体对象  Team(球队)  Player(队员)   两者关系  Team——>Player(一对多) Team<——Player(一对一)
Team 实体类中有一个NSSet 集合类型的 myPlayers
Player实体类中有一个Team 类型的 team
以下是单个实体类的增删改查基础操作

// 获取  上下文
AppDelegate * app = [UIApplication sharedApplication].delegate;
// 创建一个查询请求
NSFetchRequest *  request = [[NSFetchRequest alloc]initWithEntityName:@"Team"];// Person 是实体对象名
// 执行查询请求 并得到返回结果
NSArray * persons = [app.managedObjectContext executeFetchRequest:requesterror:nil];
// 增
Person * person = [NSEntityDescription insertNewObjectForEntityForName:@"Team"inManagedObjectContext:app.managedObjectContext];
// 删除
NSFetchRequest * request = [NSFetchRequest  fetchRequestWithEntityName:@"Team"];
NSArray * teams = [app.managedObjectContext executeFetchRequest:requesterror:Nil];
for (Team * team in persons) {
if ([team.name isEqualToString:@"湖人"]) {
[app.managedObjectContext deleteObject:team];
[app saveContext];
}
}
// 保存
// 更改之后
[app saveContext]; // 保存


两个实体类之间的关系 用TableView表示两者的层级关系

// 添加
NSArray * players = self.team.myPlayers.allObjects;
Player * player = [NSEntityDescriptioninsertNewObjectForEntityForName:@"Player"inManagedObjectContext:self.app.managedObjectContext];
player.name = [alertView textFieldAtIndex:0].text;
player.myTeam = self.team;建立对应关系
[self.appsaveContext];
//删除
NSArray * players = self.team.myPlayers.allObjects;// 获取NSSet集合中的Player类型对象
Player * player = players[indexPath.row];
[self.app.managedObjectContextdeleteObject:player];
[self.appsaveContext];
// 1.设置查询条件
[request setPredicate:[NSPredicatepredicateWithFormat:@"name='李四'"]];
[request setPredicate:[NSPredicatepredicateWithFormat:@"age<=30"]];
// 2.对查询结果排序
[request setSortDescriptors:@[[NSSortDescriptorsortDescriptorWithKey:@"age"ascending:NO]]];
// 数组排序
NSArray * sortTeam = [team sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
Team * t1 = obj1;
Team * t2 = obj2;
if (t1.age > t2.age) {
return NSOrderedAscending;
}else
return NSOrderedDescending;
}];


// 获取plist文件中的内容
NSString * path = [[NSBundle mainBundle] pathForResource:@"Area" ofType:@"plist"];
NSDictionary * rootArea = [NSDictionary dictionaryWithContentsOfFile:path];
// 如果plist文件外围被数组包含,则先打开数组
NSArray * areas = [NSArray arrayWithContentsOfFile:path];
NSDictionary * rootArea = areas[0];


1.User Default

用于存储应用程序的配置信息

1) 是不是第一次打开?

   如果是第一次打开  就展示教学图片

2)当前的应用程序版本信息

   如果发现本地存储的版本信息 和 服务器上有差距  就 提示用户更新程序 

3)当前应用程序被打开的次数

4)数据结构版本信息

  做数据迁移(1.0 ->2.0)

User Default 使用  三步走

取值        常用方法有:

返回类型  NSInteger   - (NSInteger)integerForKey:(NSString
*)defaultName;

返回类型  BOOL   - (BOOL)boolForKey:(NSString
*)defaultName;
   改值  int++ 等等;
 
4000
 存值  对应方法:

- (void)setInteger:(NSInteger)value forKey:(NSString
*)defaultName;
- (void)setBool:(BOOL)value forKey:(NSString
*)defaultName;

- (BOOL)synchronize; // 同步

2.单例模式
1)设计模式之一
2)使用频率特别高
3)让数据或对象 在程序的各个地方都能访问 并且保持唯一
4)真正限制数量的是对象的个数
 -- 使用该类的人不要调用alloc消息 以及任何涉及初始化的类工厂方法
5)保证在程序各处均能访问
+ 静态消息 有类就能调用
创建一个类 LXYSingleton
.h文件
+(LXYSingleton *)sharedSingleton;
.m文件
static LXYSingleton * _sharedInstace;// 声明静态类型,保证内存中一直存在一个该类型对象
+ (LXYSingleton *)sharedSingleton
{
if(_sharedInstace == nil) {
_sharedInstance = [[LXYSingleton alloc] init];
}
return _sharedInstance;
}
在别的类使用 import 导入头文件
LXYSingleton * singleton = [LXYSingleton sharedInstance];
绝对不可以用alloc方法实例化
严禁 release 该对象,否则程序肯定出事  
单例模式的优点
     属性
在该类声明的属性都可以跨区域访问
单例模式下共享数据
在不同的界面用该属性进行传值  第三种传值方式 类似全局变量(第一种 注入/第二种
delegate)
目的:降低VC之间的耦合程度
还能在不同的任何对象之间传送数据
单例模式的缺点
都有可能修改这个类的属性

给大家推荐一个swift视频教程,后续会不断更新,下载文件需要验证多次,有点耐心哦!

从OC转移到swift:环境与变量

swift进阶可能值

swift枚举扩展泛型

类初始化属性方法

元组闭包

变量字符串集合循环

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息