CoreData使用笔记
1. 重要概念
1) Entity (NSEntityDescription)
对应数据库中的表
NSEntityDescription *userEntity = [[[NSEntityDescription alloc] init] autorelease]; [userEntity setName:@"User"];
2) Propery (NSAttributeDescription)
Entity的列
NSAttributeDescription *nameAttribute; nameAttribute = [[[NSAttributeDescription alloc] init] autorelease]; [nameAttribute setName:@"name"]; [nameAttribute setAttributeType:NSStringAttributeType]; [nameAttribute setOptional:NO];
把属性和表关联:
[userEntity setProperties:
[NSArray arrayWithObjects: dobAttribute, nameAttribute, nil]];
2) Managed Object Model (NSManagedObjectModel)
相当于数据库里的schema (什么是schema,请百度下)
3) Managed Object Context (NSManagedObjectContext)
相当于数据库中的表
4) Managed Object
相当于数据库的行。
5) Persistent Store coordinator
2. Core Data 的 CRUD操作
1) Create
例子:插入一条新的记录
-(BOOL)addUser:(NSString*) _userName dateOfBirth:(NSDate*)_dob andSocial:(NSString*)_social { User *user = (User *)[NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:self.managedObjectContext]; user.dob = _dob; user.name = _userName; user.social = _social; return [self.managedObjectContext save:NULL]; }
2) Delete
[self.managedObjectContext deleteObject:user];
[self.managedObjectContext save:NULL];
3) Read and update
i) 无条件的Fetch
-(NSArray*)allUsers{ NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:self.managedObjectContext]; [request setEntity:entity]; return [self.managedObjectContext executeFetchRequest:request error:NULL]; }
ii) 有条件的Fetch
-(NSArray*)usersWithNameQuery:(NSString*)_query { NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:self.managedObjectContext]; [request setEntity:entity]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name like[cd] %@", [NSString stringWithFormat:@"*%@*", _query]]; [request setPredicate:predicate]; return [self.managedObjectContext executeFetchRequest:request error:NULL]; }
iii) 排序Fetch
-(NSArray*)allUsersSorted { NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:self.managedObjectContext]; [request setEntity:entity]; NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"dob" ascending:NO] autorelease]; [request setSortDescriptors: [NSArray arrayWithObject:sortDescriptor]]; return [self.managedObjectContext executeFetchRequest:request error:NULL]; }