除此之外,我们还可以创建与Player、Team相对应的具体的NSManagedObject子类,如下图:
Xcode会为我们生成子类的代码,如Player的接口声明和实现(汗,从Xcode复制代码到Evernote,有些空格会被省略):
- @interface Player : NSManagedObject
- @property (nonatomic, retain) NSNumber * age;
- @property (nonatomic, retain) NSString * name;
- @end
- @implementation Player
- @dynamic age;
- @dynamic name;
- @end
有了自定义子类后,我们就可以更简洁地操作对象,比如对Team的读写可以改成:
- NSArray *teamArray = [self fetchTeamList];
- if (teamArray) {
- for (Team *teamObject in teamArray) {
- NSLog(@"Team info : %@, %@\n", teamObject.name, teamObject.city);
- }
- }
以及 :
- Team *teamObject = [NSEntityDescription insertNewObjectForEntityForName:@"Team" inManagedObjectContext:self.managedObjectContext];
- teamObject.name = teamName;
- teamObject.city = teamCity;
然后再执行一遍程序。这时候,发现程序输出重复的球队信息,因为我们创建了两次同样的数据。但实际上一个联盟不应该存在相同名称的两支球队,所以我们应该在插入数据的时候进行验证(这种情况下,创建Team的函数也根据含义而改名):
- - (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的使用放在后面进一步讨论。
相关推荐
这本书旨在帮助iOS开发者掌握Core Data的核心概念和实践技巧,从而有效地存储、管理和检索应用程序的数据。 Core Data是Apple提供的一种对象图形管理系统,它允许开发者在iOS、macOS和其他Apple平台上存储和管理...
Core Data是苹果提供的一种数据管理框架,它为iOS、macOS、watchOS和tvOS应用程序提供了模型层的抽象和管理。这份教程旨在帮助开发者深入理解和有效地使用Core Data进行数据存储和检索。 Core Data的核心概念包括:...
你会学习到如何在代码中使用Core Data进行数据的增删改查操作,如创建NSManagedObjectContext实例来管理数据操作,通过NSManagedObject子类来映射实体,使用NSPredicate构建查询条件,以及如何执行排序和分组等复杂...
《Core Data by Tutorials v6》是一本专为iOS开发者准备的深度学习教程,它针对的是iOS 13操作系统和Swift 5.1编程语言,同时配合最新的Xcode 11开发工具。这本书通过详实的例子和源代码,旨在帮助读者深入理解并...
《Core Data by Tutorials》是一本专注于iOS和macOS开发中的数据管理框架——Core Data的教程书籍。v2.0版本的示例代码提供了一系列深入的实践案例,帮助开发者掌握这个强大的持久化存储技术。Core Data是Apple为iOS...
4. **Core Data堆栈(The Core Data Stack)**:Core Data堆栈是指一系列协同工作的对象,它们共同完成了数据的存储和检索。这包括托管对象模型(Managed Object Model)、持久化存储(Persistent Store)和持久化...
3. NSManagedObject和NSManagedObjectContext:在Core Data架构中,NSManagedObject是所有实体对象的基类,代表数据模型中的一个实例。而NSManagedObjectContext是数据模型的核心,负责协调数据的创建、修改和删除,...
Core Data是苹果公司为其iOS和macOS平台提供的一项强大的数据管理框架,用于处理应用程序中的对象图和持久化存储...通过这个示例,开发者可以了解并掌握Core Data的基本用法,为进一步深入学习和优化数据管理打下基础。
这个压缩包包含了一系列关于如何在Swift项目中使用Core Data的实践代码,对于开发者来说是一份宝贵的资源。Core Data是Apple开发的一个数据管理框架,主要用于管理应用程序中的对象状态,尤其在iOS、macOS等平台的...
《Core Data by Tutorials》是iOS开发者们广泛参考的一本书,专注于Swift语言和Apple的Core Data框架。这个压缩包包含了该书的源代码,适用于Swift 1.2和Xcode 6.3版本。源代码分为不同的章节,覆盖了从基础到高级的...
通过查看源码,你可以了解如何设置数据模型、如何创建和管理 NSManagedObjectContext、如何执行 NSPredicate 查询,以及如何将结果展示在用户界面中。 总之,Core Data 是一个强大且灵活的数据管理工具,对于 iOS ...
在Swift 3.0中,Apple对访问Core Data的方式进行了重大改进,使其更加简洁和高效。Core Data是Apple提供的一款强大的持久化框架,用于管理应用程序中的对象模型和数据。在这个过程中,我们将深入探讨如何在Swift 3.0...
《Core Data by Tutorials iOS 12 and Swift 4.2, 5th Edition》是针对iOS开发者的经典教程,提供了完整的源代码示例,帮助读者深入理解和掌握苹果的持久化框架Core Data。这个资源包包含了各个章节的初始版本和最终...
在iOS开发中,Core Data是苹果提供的一种强大的数据管理框架,用于处理应用程序中的对象图和持久化存储。本文将深入探讨如何在iOS应用中使用Core Data来管理Care Data,通过提供的"iPhoneCoreDataRecipes"工程代码,...
首先,我们来了解一下Core Data的核心概念: 1. **实体(Entities)**:在Core Data中,实体代表了数据库中的表,可以将其理解为数据模型的一个类。你可以定义多个实体,每个实体代表一类对象,比如用户、订单等。 ...
《Core Data by Tutorials》第二版的源代码包含了一系列关于iOS开发中Core Data技术的实践示例。这个压缩包提供了各个章节的代码实现,涵盖了从基础到进阶的各种主题,帮助开发者深入理解并掌握Core Data的使用。...
这个练习将深入探讨如何使用Core Data来实现数据的添加和查询操作,这对于任何使用iOS SDK开发应用的开发者来说都是至关重要的技能。 Core Data不仅是一个数据库系统,它还包含了对象图管理、持久化、变更跟踪以及...
总结来说,"SingleTableCoreDataDemo"是一个实践教程,它帮助开发者了解如何在iOS应用中使用Core Data进行数据管理,实现数据的持久化存储,并通过UI展示和交互。通过学习和实践这个示例,开发者可以掌握Core Data的...