我正在制作一个包含核心数据的简单日记应用。
主模型(Journal)将包含一个标题和一个正文。 每个条目可以有一个或多个标签。
要插入一个新的(期刊),我只是这样做:
Journal *newJournal [NSEntityDescription insertNewObjectForEntityForName:@"Journal"
inManagedObjectContext:context];
//Save
问题一:为词条添加标签的正确方法是什么?
我可以这样做:
Tag *tag1 = [NSEntityDescription insertNewObjectForEntityForName:@"Tag"
inManagedObjectContext:context];
Tag *tag2 = [NSEntityDescription insertNewObjectForEntityForName:@"Tag"
inManagedObjectContext:context];
newJournalEntry.tags = [[NSOrderedSet alloc] initWithObjects:tag1,tag2,nil];
// Save card...
...但这将为每个条目创建新标签。我只需要核心数据模型中每个标签的唯一实例。
问题 2:如何按标签查询日记条目,例如“获取所有带有 fun 标签的日记条目”
我还需要获取所有创建的标签并显示它们,例如:“您有 3 个标签:乐趣、运动、假期”
最佳答案
首先,您需要在 Journal 和 Tag 模型之间建立多对多关系,否则您将无法将同一个 Tag 分配给多个 Journal 条目
答案 1:在为日记条目分配任何标签之前,从商店中获取现有标签:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Tag"];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"name IN %@", @[@"tag1", @"tag2"]];
NSArray *tags = [moc executeFetchRequest:fetchRequest error:&error];
然后您应该使用 -insertNewObjectForEntityName
仅为缺少的标签创建标签。
答案 2:
NSError *error;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Journal"];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"tags CONTAINS[cd] %@", @"fun"];
NSArray *journalEntries = [moc executeFetchRequest:fetchRequest error:&error];
您可以在 Predicates Programming Guide 中阅读有关谓词的更多信息
关于ios - 核心数据 : Insert and delete with To many relationship,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21732140/