首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

Core Data浅谈系列之三 : 理解NSManagedObject和NSPredicate

2013-01-26 
Core Data浅谈系列之三 : 了解NSManagedObject和NSPredicate上一篇文章用实际代码演示了Core Data应用中基

Core Data浅谈系列之三 : 了解NSManagedObject和NSPredicate
上一篇文章用实际代码演示了Core Data应用中基本的增删改查操作,使用的是NSManagedObject对象,利用KVC来修改、获取对象的属性值。除此之外,我们还可以创建与Player、Team相对应的具体的NSManagedObject子类,如下图:
Core Data浅谈系列之三 : 理解NSManagedObject和NSPredicate

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两支球队的信息输出。
这是我们显式创建新的NSManagedObject实例时所采取的去重方案,使用NSPredicate进行条件查询,如果已经存在指定名称的球队就不再重复创建。如果是在关联属性时这么写代码,比如为一支球队添加多名球员,会显得有点冗余。对于这种情况,可以进行属性验证,这会和NSPredicate的使用放在后面进一步讨论。
Brief Talk About Core Data Series, Part 3 : Understanding NSManagedObject & NSPredicate
Jason Lee @ HangzhouBlog : http://blog.csdn.net/jasonblogWeibo : http://weibo.com/jasonmblog

热点排行