如何确保核心数据实体的单一实例
Posted
技术标签:
【中文标题】如何确保核心数据实体的单一实例【英文标题】:How to ensure a single instance of a core data entity 【发布时间】:2011-02-23 08:46:50 【问题描述】:我有一个 iPhone 应用程序,我想维护用户的个人资料信息。 我还有一个朋友列表。
个人资料中包含的信息字段与朋友的相同。
我有一个朋友的核心数据实体。
我应该为个人资料创建一个单独的实体还是只使用朋友实体。
如果我使用单独的实体,如何确保只有 1 个配置文件实例。
如果我使用朋友实体,当我为朋友表视图获取朋友列表时,如何确保不显示个人资料信息。
提前致谢。
【问题讨论】:
【参考方案1】:您或许应该重新考虑您的命名约定,以便更轻松地可视化您的对象模型。
在我看来,您有一个名为“成员”的实体,具有您当前拥有的所有属性,以及与自身的多对多“isFriend”关系。
这样,任何“朋友”都可以成为“个人资料”,任何“个人资料”都可以成为“朋友”。它还可以让您非常直接地实例化一个“成员”对象并拉取它的所有“朋友”。
至于确保只有一个配置文件实例,您需要为每个实例设置一个唯一标识符 - 如果您没有太多关于您要实现的目标的背景知识,我建议您考虑拥有一个用户名或电子邮件地址字段,您可以将其用作参数来执行 fetchRequest 并查看是否在允许成员注册/创建新配置文件之前获得任何现有命中。
【讨论】:
好的!谢谢。如何根据字段发出提取请求。例如。获取没有 name="MY NAME" 的所有内容(我的个人资料)。所以我可以填充一个只有朋友的列表? 如果您有一个带有您不想获取的名称的 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];
,大致如下【参考方案2】:
你如何制作一个带有类似属性的表格
Name (NSString)
...
//your desired attributes which are common to both
isFriend (BOOL)//to keep track of profile type
这样你就不需要创建两个实体了。
【讨论】:
以上是关于如何确保核心数据实体的单一实例的主要内容,如果未能解决你的问题,请参考以下文章