我目前正在尝试更新我的代码以便更高效,为此我正在查看我的CoreData托管对象的更新功能。我有以下代码可以正常工作,但是,仪器中的Time Profiler显示关系的创建相当慢。两个对象都具有一对多的关系,因此具有我更新的集合如下:
NSMutableSet *labelSet = [NSMutableSet setWithSet:labelEntity.rTickets];
if (![labelSet containsObject:entity])
{
[labelSet addObject:entity];
[labelEntity setRTickets:labelSet];
}
NSMutableSet *ticketSet = [NSMutableSet setWithSet:[(TicketEntity *)entity rLabels]];
if (![ticketSet containsObject:labelEntity])
{
[ticketSet addObject:labelEntity];
[(TicketEntity *)entity setRLabels:ticketSet];
}
这一切都按预期工作,所有CoreData都保持正确,数据显示在另一个类的UITableView
中。但是,我觉得使用下面更简洁的代码可以实现同样的目标:
if (![labelEntity.rTickets containsObject:entity])
[labelEntity.rTickets setByAddingObject:entity];
if (![[(TicketEntity *)entity rLabels] containsObject:labelEntity])
[[(TicketEntity *)entity rLabels] setByAddingObject:labelEntity];
由于某些原因,这不会按预期运行,所有实体关系都不会保持持久性。我错过了与此功能明显不同的东西吗?起初我想也许这个集合没有正确初始化,因此在{0}上调用了setByAddingObject
,所以我尝试首先初始化集合,然后使用setByAddingObject
所有后续请求,但这没有任何区别。任何人都可以让我知道为什么上面的第二个代码不起作用?或者是管理两个多NSManagedObjects
之间关系的最佳方式。
由于