我想显示来自后端的数据,所以让我们看一个示例json文件:
{
"fonts": [
{
"name": "Helvetica",
"styleIdentifier": "H0",
"size": 17
},
{
"name": "Helvetica",
"styleIdentifier": "H1",
"size": 14
},
{
"name": "Helvetica-Bold",
"styleIdentifier": "H0Bold",
"size": 17
},
{
"name": "HelveticaNeue-Light",
"styleIdentifier": "H0Light",
"size": 40
}
]
}
所以我创建了一个
relationship
(很多很多),并选择了ordered
选项。通过输入,我看到它总是以相同的方式写入Core Data,但是当我尝试获取它时configuratation.fonts
其中fonts
是NSOrderedSet
,我以完全随机的顺序获取商品。我在规范上想念某事吗?还是我应该以某种方式对其进行排序?__EDIT__
首先,当我从json上面获取数据时,我有一个带有空字体关系的配置集。然后,我将其提取并使用以下命令将其插入核心数据中:
NSMutableArray *returnArray = [NSMutableArray new];
for(NSDictionary *fontDictionary in jsonArray) {
Font *fontObj = [Font font:fontDictionary inContext:context];
[returnArray addObject:fontObj];
}
并且在此数组中,数据的顺序正确。然后在配置对象中,通过以下方式将其添加到
NSOrderedSet
中:-(void)appendTracks:(NSArray<Font*>*)fontArray {
self.fonts = [NSOrderedSet orderedSetWithArray: fontArray];
}
然后我尝试通过简单地使用引用来获取它:
configuration.fonts
并且在此步骤中,数据完全没有正确的顺序。
最佳答案
不要直接设置NSOrderedSet。
修改现有集:
[self.fonts addObjectsFromArray:fontArray];
或者:
Xcode生成用于在生成的
NSManagedObject
类内的有序集中添加和删除条目的方法。假设您有一个称为
Entity
的ManagedConfiguration
,其中包含一个称为fonts
的有序到多个关系:ManagedConfiguration *managedObjectConfigurationInstance = //create or fetch configuration in ManagedObjectContext
NSOrderedSet<ManagedFont> *fonts = //created or fetched fonts in wanted order
managedObjectConfigurationInstance.addToFonts(fonts)
replaceFonts
和removeFromFontsAtIndex
aso。方法也会生成。根据您的要求,您可能希望以随机顺序存储字体,然后将
NSSortDescriptor
应用于NSFetchRequest
以按特定顺序获取数据。关于ios - 来自服务器和核心数据的NSOrderedSet响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40303449/