Iphone 我在哪里可以找到核心数据对多关系的好例子?

Iphone 我在哪里可以找到核心数据对多关系的好例子?,iphone,objective-c,xcode,core-data,Iphone,Objective C,Xcode,Core Data,是否有人有教程或源代码显示正在使用的对多关系,用户可以在其中动态添加元素?我只想看一看,因为阅读有关它的内容没有多大帮助。您可以尝试在“在Mac上学习可可”一书中查看资料来源。在第7章和第8章中 我希望你能找到你所需要的获取Marcus Zarra的书“核心数据”(你可以购买PDF而不是纸质文件以获得即时满足…)它也提供了Mac OS X中的示例,但它远不止是开始。您将发现一些有用的东西,如版本控制、转换规则和优化。这本书使我的一个项目免于迟到和拖延 我目前正在使用这本电子书,它写得非常

是否有人有教程或源代码显示正在使用的对多关系,用户可以在其中动态添加元素?我只想看一看,因为阅读有关它的内容没有多大帮助。

您可以尝试在“在Mac上学习可可”一书中查看资料来源。在第7章和第8章中


我希望你能找到你所需要的

获取Marcus Zarra的书“核心数据”(你可以购买PDF而不是纸质文件以获得即时满足…)它也提供了Mac OS X中的示例,但它远不止是开始。您将发现一些有用的东西,如版本控制、转换规则和优化。这本书使我的一个项目免于迟到和拖延

我目前正在使用这本电子书,它写得非常好: 它解释并展示了如何创建数据模型,还有一些代码示例

“用于iOS的Pro Core数据”


希望有帮助

这里有一个一对多关系的示例,只要您设置了关系,使它们有一个相反的关系,它们就很容易管理。最后,Entity1的chilren属性将包含entity2和entity3

Entity1 *entity1=[NSEntityDescription insertNewObjectForEntityForName:@"Entity1" inManagedObjectContext:self.managedObjectContext];
Entity2 *entity2=[NSEntityDescription insertNewObjectForEntityForName:@"Entity2" inManagedObjectContext:self.managedObjectContext];
Entity2 *entity3=[NSEntityDescription insertNewObjectForEntityForName:@"Entity2" inManagedObjectContext:self.managedObjectContext];

[entity2 setParentEntity:entity1];
[entity3 setParentEntity:entity1];
NSError *error;
[[self managedObjectContext]save:&error];

NSSet *set=[entity1 children];

请看苹果的

我使用mutableSetValueForKey创建对象并将其添加到关系中:

mutableSetValueForKey:返回一个可变代理对象。如果您改变其内容,它将为关系发出相应的键值观察(KVO)更改通知


人们经常被许多关系所迷惑,因为一个实体将关系表示为一个集合,而另一个实体将其表示为单个对象。以下列实体为例:

EntityA{
    name:string
    bees<-->>EntityB.a
}

EntityB{
    name:string
    a<<-->EntityA.bees
}
…或者更紧凑地说:

[[anEntityAObj mutableSetValueForKey:@"bees"] addObject:aNewBObj];
但是,如果从EntityB端进行设置,则只需添加一个对象,这样就可以直接使用setValueForKey:像这样:

[anEntityBObj setValueForKey:anEntityAObj];
如果您使用通用NSManagedObject实例来表示您的实体,就会出现这种情况。如果创建自定义子类,则可以使用属性和方法进行设置:

[anEntityAObj addBeesObject:anEntityBObj];
anEntityBObj.a=anEntityAObj;
还请记住,对于托管对象,将定义为互惠关系的一侧设置为互惠关系会自动设置另一侧,删除也会以相同的方式工作

更新
假设我有两个实体-- Person:具有“name”属性-- 泰晤士报:带有“time”属性——我会 要为每个设置多次吗 名字,但我怎么告诉它哪个名字 我想补充一下具体的时间 去

在本例中,您不会创建与属性的关系(在本例中为
name
),而是与对象的关系(在本例中为
Person
实体/类的实例)。每个
Person
对象与所有其他
Person
对象完全分离,即使它们的
name
属性中的值相同

您必须获得对任何特定
父对象的引用。如果您刚刚插入了一个新的
父对象
对象,那么您已经有了对它的引用。如果它已经被插入/持久化,那么您将使用一个谓词创建一个fetch,该谓词将返回正确的对象。拥有正确的
父对象后,只需将
时间
对象添加到关系中即可

因此,如果您的实体看起来像以下伪代码:

Parent{
    name:string
    times<-->>Time.parent
}

Time{
    theTime:date
    parent<<-->Parent.times
}
请注意,如果从
Time
对象一侧设置关系,则可以使用setValue:ForKey:因为从
Time
对象的角度来看,关系只是一个对象与一个对象之间的关系


一旦你开始考虑对象而不是数据库,这真的很简单。在上下文中插入的每个对象都是唯一的,即使它与同一实体/类的其他对象共享属性。这就是为什么您可以设置特定对象之间的关系,而不必担心存储在其属性中的值

下载示例代码。这是一个完整的核心数据演示,也是熟悉这些概念的绝佳方式。

Ray Wenderlich提供了大量的核心数据教程

这是建立在


你在与很多人的关系中挣扎的是哪一部分?也许我应该说ios,但我想我只是没有足够的知识来获取代码片段并将其放入我的程序中……然而,具体来说,我的问题是如何向第二个实体添加与第一个实体中的特定实体相对应的项目。假设我有两个实体--Person:具有“name”属性--Times:具有“time”属性--我希望为每个名称设置多次,但是我如何告诉它我想把具体的时间添加到哪个名称?你能举个例子说明AnewObj可能是什么吗?如果我提取的对象与另一个对象同名怎么办?我怎么能告诉它只取我想要的那个呢?这是数据模型设计的一部分。属性中必须包含足够的信息,以区分一个对象和另一个对象。毕竟,真实的对象、事件或条件有很多区别它们的信息,您需要确保在数据模型中捕获这些信息。
Parent{
    name:string
    times<-->>Time.parent
}

Time{
    theTime:date
    parent<<-->Parent.times
}
NSManagedObject *existingParent= //... results of a fetch
    NSManagedObject *newTime=[NSEntityDescription insertNewObjectForEntityForName:@"Time" inManagedObjectContext:self.moc];
    [newTime setValue:[NSDate date] forKey:@"theTime"];
    [newTime setValue:existingParent forKey:@"parent"];