我遇到了问题,并了解如何为这种情况创建核心数据模型。iPhone核心数据关系
(1)一个人可以有多只宠物(或者是狗或猫的组合)。
(2)也可能有多人。
我想通过Person实体并拉动每个人,以及每个宠物和那里的信息。
我不确定我是否应该使用关系,或者如何在Core Data中设置此模型。我迅速记下了我认为模型的外观。为了简单起见,我创建了这个模型,我的模型不涉及猫和狗。
任何建议或想法,不胜感激。
我遇到了问题,并了解如何为这种情况创建核心数据模型。iPhone核心数据关系
(1)一个人可以有多只宠物(或者是狗或猫的组合)。
(2)也可能有多人。
我想通过Person实体并拉动每个人,以及每个宠物和那里的信息。
我不确定我是否应该使用关系,或者如何在Core Data中设置此模型。我迅速记下了我认为模型的外观。为了简单起见,我创建了这个模型,我的模型不涉及猫和狗。
任何建议或想法,不胜感激。
我赶紧把一个模型,您:
所以,基本上是“人”是你的人,这有关系“的宠物” - 这是一种“以很多“的关系。一个人可以有多个宠物。
然后有一个“宠物”实体。这是一个抽象的实体,代表任何宠物,猫和狗。它与“人物”的“宠物”呈反比关系。因此,从任何宠物,你总是可以追溯到相应的所有者。此外,“Pet”的每个子类都将具有一些常见属性,如年龄/名称/体重。除了“宠物”的属性之外,子类(具有“宠物”作为“父实体”,如“狗”和“猫”的实体)可以具有其自己的属性,如“狗”一个“barkSound”,一个“Cat”有一个“meowSound”。
当然,您可以根据需要将尽可能多的人加入存储,这与数据模型无关。
要检索信息,只需使用获取请求来获取所有人。然后通过它们循环访问他们的“宠物”财产,为他们的宠物获得NSSets。您可以循环访问这些设置以访问宠物的信息。
下面是如何获取的所有人员,然后所有的宠物一个例子:
// Fetch all persons
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:yourContext];
[fetchRequest setEntity:entity];
NSError *error = nil;
NSArray *fetchedObjects = [yourContext executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
// Handle error case
}
[fetchRequest release];
// Loop through all their pets
for (Person* person in fetchedObjects)
{
NSLog(@"Hello, my name is %@", person.name);
for (Pet* pet in person.pets) {
if ([pet isKindOfClass:[Dog class]])
{
NSLog(@"Woof, I'm %@, owned by %@", pet.name, pet.owner.name);
}
else
{
NSLog(@"Meow, I'm %@, owned by %@", pet.name, pet.owner.name);
}
}
}
请注意,您也可以直接获取宠物,而不会通过它们的主人打算:
// Fetch all persons
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Pet" inManagedObjectContext:yourContext];
[fetchRequest setEntity:entity];
[fetchRequest setIncludesSubentities:YES]; // State that you want Cats and Dogs, not just Pets.
NSError *error = nil;
NSArray *fetchedObjects = [yourContext executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
// Handle error case
}
[fetchRequest release];
的上面的代码没有经过测试,可能包括拼写错误,但会给你如何去做的想法。
在这个模型中,如果狗或猫没有任何属性,它会影响吗? – Vikings 2012-03-09 01:15:06
不,这没关系。我只是添加了一些属性,告诉你他们可以拥有属性。但是,如果他们永远不会拥有属性,那么只需将类型字符串或枚举添加到“Pet”即可。但是,如果他们将来可能具有属性,请坚持使用子实体。 – JiaYow 2012-03-09 01:17:30
另外,每个实体是否需要NSManagedObject子类? – Vikings 2012-03-09 01:18:04