来自服务器和核心数据的NSOrderedSet响应

Jak*_*kub 6 core-data objective-c ios

我想显示来自后端的数据所以让我们有一个示例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
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

所以我创建了一个relationship(很多 - 多个)ordered选项.通过输入我看到它总是以相同的方式写入Core Data,但是当我尝试获取它时

configuratation.fonts这里fontsNSOrderedSet我得到了完全地随机顺序的项目.我想念某个规格?或者我应该以某种方式排序?

__编辑__

首先,当我从上面的json获取数据时,我有一个空字体关系的配置集.然后我获取它并将其插入到核心数据中:

NSMutableArray *returnArray = [NSMutableArray new];
for(NSDictionary *fontDictionary in jsonArray) {
    Font *fontObj = [Font font:fontDictionary inContext:context];
    [returnArray addObject:fontObj];
}
Run Code Online (Sandbox Code Playgroud)

并且在此数组中数据的顺序正确.然后在配置对象中我将其添加到NSOrderedSet:

-(void)appendTracks:(NSArray<Font*>*)fontArray {
    self.fonts = [NSOrderedSet orderedSetWithArray: fontArray];
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试通过简单地使用引用来获取它:

configuration.fonts
Run Code Online (Sandbox Code Playgroud)

在此步骤中,数据完全不正确.

sha*_*ght 2

不要直接设置 NSOrderedSet。

修改现有集:

[self.fonts addObjectsFromArray:fontArray];
Run Code Online (Sandbox Code Playgroud)

或者:

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)
Run Code Online (Sandbox Code Playgroud)

replaceFontsremoveFromFontsAtIndex麻生太郎。方法也被生成。


根据您的要求,您可能希望以随机顺序存储字体,并应用 aNSSortDescriptorNSFetchRequest以特定顺序获取数据。