CoreData和最常用的单词/ tagged

时间:2015-01-22 23:54:28

标签: ios core-data

我有一个类似于"标签的输入字段"此网站上的功能:用户输入在他们自己的气泡中显示的一堆单词或短语。这些单词/短语与日记帐分录相关联(基本上标记日记帐分录),在概述页面上,我想显示这些单词/短语的前5或10个。

我的初始实现是在每个日记帐分录中存储一个字符串,基本上连接所有这些单词/短语。当我读取数据时,我根据预定义的分隔符拆分此字符串。这很有效,但是如果我有很多条目包含大量的这些单词/短语,那么找到前5/10将是非常糟糕的。对此更好的方法是什么?

所以,我有这样的事情:

@interface JournalEntry : NSManagedObject
{
     @property (nonatomic, retain) NSNumber * entryId;
     @property (nonatomic, retain) NSDate * dateCreated;
     @property (nonatomic, retain) TagsInfo *tagsInfo;
}

@interface TagsInfo : NSManagedObject
{
     @property (nonatomic, retain) JournalEntry * journalEntry;
     @property (nonatomic, retain) NSString * tagString;
}

我认为在正常的数据库设置中,我会为标签创建一个表,我会存储类似[journalEntryId,tagEntry]的内容。每个日记帐分录都会有一堆这些条目。这应该类似吗?

1 个答案:

答案 0 :(得分:1)

这就是我要做的,创建一个与Tag具有多对多关系的新JournalEntry实体。将现有TagInfo迁移到Tag并更新关系。

Tag至少会有以下内容:

  • JournalEntry
  • 的多人关系
  • 名为tagString(或tagName或其他)的字符串。

JournalEntry会与Tag之间建立多对多的关系。 tagString将是唯一的,因为每个Tag可能与多个日记帐分录相关。

然后你可以获取标签以及每次使用的次数,如下所示:

NSExpression *tagCountExpression = [NSExpression expressionWithFormat:@"count(journalEntries)"];
NSExpressionDescription *tagCountExprDescription = [[NSExpressionDescription alloc] init];
tagCountExprDescription.name = @"count";
tagCountExprDescription.expression = tagCountExpression;
tagCountExprDescription.expressionResultType = NSInteger64AttributeType;

NSFetchRequest *tagFetch = [NSFetchRequest fetchRequestWithEntityName:@"Tag"];
[tagFetch setResultType:NSDictionaryResultType];
tagFetch.propertiesToFetch = @[ @"tagString", tagCountExprDescription ];
tagFetch.propertiesToGroupBy = @[ @"tagString" ];

那会给你一系列字典。每个都包含tagStringcount标记有多少相关日记帐分录。你必须自己排序(不能使用表达式作为排序描述符)。