2011-02-23 54 views
1

我有一个iPhone应用程序,我想维护用户的配置文件信息。 我也有一个朋友的列表。如何确保核心数据实体的单个实例

配置文件中包含的信息字段与朋友的信息字段相同。

我有一个朋友的核心数据实体。

我应该为个人资料制作一个单独的实体还是仅使用朋友实体。

如果我使用单独的实体,我如何确保只有一个配置文件实例。

如果我使用朋友实体,我如何确保在为朋友表视图获取朋友列表时不显示个人资料信息。

在此先感谢。

回答

0

你怎么样让一个表属性,如

Name (NSString) 
... 
//your desired attributes which are common to both 
isFriend (BOOL)//to keep track of profile type 

这样你就不需要做两个实体。

1

您应该重新思考自己的命名约定,以便更容易地查看对象模型。

有办法我看到它,你有一个名为'成员'的实体,包含你现在拥有的所有属性,加上一个多对多的“isFriend”与自身的关系。

这样,任何“朋友”都可以成为“个人资料”,任何“个人资料”都可以成为“朋友”。它也会使你非常直接地实例化一个'成员'对象并把它所有的'朋友'拉下来。

至于确保只有一个配置文件的实例,你将需要每个实例的唯一标识符 - 没有太多的背景知道你想要达到什么目的,我建议你考虑拥有一个用户名或电子邮件地址字段,您可以使用它作为参数执行fetchRequest,并在允许成员注册/创建新配置文件之前查看是否获得任何现有匹配。

+0

好的!谢谢。如何根据字段进行提取请求。例如。获取所有名称=“我的名字”(我的个人资料)。所以我可以填充只有朋友的列表? – klyngbaek 2011-02-23 10:08:32

+0

这里粗略地说,如果你有一个myName字符串,你不想获取的名字 - “NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init]; NSPredicate * predicate = [NSPredicate predicateWithFormat:@“(name!=%@)”,myName]; [fetchRequest setPredicate:predicate]; NSEntityDescription * entity = [NSEntityDescription entityForName:@“Member”inManagedObjectContext:self.managedObjectContext]; [fetchRequest setEntity:entity]; NSError * error; NSArray * arrayOfObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];' – Rog 2011-02-23 10:17:45