我想显示来自后端的数据,所以让我们看一个示例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其中fontsNSOrderedSet,我以完全随机的顺序获取商品。我在规范上想念某事吗?还是我应该以某种方式对其进行排序?

__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类内的有序集中添加和删除条目的方法。

假设您有一个称为EntityManagedConfiguration,其中包含一个称为fonts的有序到多个关系:
ManagedConfiguration *managedObjectConfigurationInstance = //create or fetch configuration in ManagedObjectContext
NSOrderedSet<ManagedFont> *fonts = //created or fetched fonts in wanted order
managedObjectConfigurationInstance.addToFonts(fonts)
replaceFontsremoveFromFontsAtIndex aso。方法也会生成。

根据您的要求,您可能希望以随机顺序存储字体,然后将NSSortDescriptor应用于NSFetchRequest以按特定顺序获取数据。

关于ios - 来自服务器和核心数据的NSOrderedSet响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40303449/

10-14 16:28
查看更多