Core Data浅谈系列之三 : 了解NSManagedObject和NSPredicate
上一篇文章用实际代码演示了Core Data应用中基本的增删改查操作,使用的是NSManagedObject对象,利用KVC来修改、获取对象的属性值。除此之外,我们还可以创建与Player、Team相对应的具体的NSManagedObject子类,如下图:
Xcode会为我们生成子类的代码,如Player的接口声明和实现(汗,从Xcode复制代码到Evernote,有些空格会被省略):
- (BOOL)insertTeamWithName:(NSString *)teamName city:(NSString *)teamCity{ if (!teamName || !teamCity) { return NO; } Team *teamObject = [self getTeamInfoByName:teamName]; if (nil == teamObject) { teamObject = [NSEntityDescription insertNewObjectForEntityForName:@"Team" inManagedObjectContext:self.managedObjectContext]; } teamObject.name = teamName; teamObject.city = teamCity; return YES;}- (Team *)getTeamInfoByName:(NSString *)teamName{ Team *teamObject = nil; NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *teamEntity = [NSEntityDescription entityForName:@"Team" inManagedObjectContext:self.managedObjectContext]; [fetchRequest setEntity:teamEntity]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@", teamName]; [fetchRequest setPredicate:predicate]; [fetchRequest setFetchLimit:1]; NSError *error = NULL; NSArray *array = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error]; if (error) { NSLog(@"Error : %@\n", [error localizedDescription]); } if (array && [array count] > 0) { teamObject = [array objectAtIndex:0]; } [fetchRequest release], fetchRequest = nil; return teamObject;}把已经安装的App删除,然后重新运行下程序,可以看到不管运行多少次,都只会有Heat和Lakers两支球队的信息输出。