Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 连接条件后的核心数据和排序_Ios_Sorting_Core Data - Fatal编程技术网

Ios 连接条件后的核心数据和排序

Ios 连接条件后的核心数据和排序,ios,sorting,core-data,Ios,Sorting,Core Data,我的核心数据表中有3个表。 项目表:项目,具有ID列和与属性表的连接。 属性表:它有一个propertyValue列、一个到item表的连接和一个到property表的连接。 属性表:它有一个propertyName列和一个到属性表的连接 属性表包含一个名为“价格”的属性名称。 属性表包含属性“价格”的属性值“20”。 你认为我能按价格把商品分类吗 我正在使用一个NSFetchedResultsController,我正在为它创建一个NSFetchRequest。 我尝试为NSFetchRequ

我的核心数据表中有3个表。
项目表:项目,具有ID列和与属性表的连接。
属性表:它有一个propertyValue列、一个到item表的连接和一个到property表的连接。
属性表:它有一个propertyName列和一个到属性表的连接

属性表包含一个名为“价格”的属性名称。
属性表包含属性“价格”的属性值“20”。
你认为我能按价格把商品分类吗

我正在使用一个
NSFetchedResultsController
,我正在为它创建一个
NSFetchRequest
。 我尝试为
NSFetchRequest
编写一个带有比较器块对象的NSSortDescriptor。它不起作用了。在此之后,我尝试编写一个没有任何选择器或块对象的NSSortDescriptor,我只是设置了一个名为“dealPrice”的键,并使用名为
-(NSString*)dealPrice
的方法在Item managed对象上创建了一个类别。它也不起作用


你知道其他的方法吗?或者您知道解决方案吗?

我首先建议您不要再像数据库一样考虑CoreData。它不是一个数据库。你称之为“表”的东西实际上是实体。将它们视为对象,它们与其他对象具有属性和关系。考虑使您的数据模型尽可能简单。不要试图为数据库性能等优化您的结构。实际的备份架构不在您的控制之下


考虑到这一点,从您发布的关于数据模型的内容来看,您似乎应该能够折叠成至少2个实体,而不是3个实体(可能是1个,但不确定是否可以看到整个数据模型)。然后,您应该能够使用一个谓词对Items实体执行简单的fetch操作,该谓词对其相关对象的属性进行排序。

我首先建议的是不要像数据库一样考虑CoreData。它不是一个数据库。你称之为“表”的东西实际上是实体。将它们视为对象,它们与其他对象具有属性和关系。考虑使您的数据模型尽可能简单。不要试图为数据库性能等优化您的结构。实际的备份架构不在您的控制之下


考虑到这一点,从您发布的关于数据模型的内容来看,您似乎应该能够折叠成至少2个实体,而不是3个实体(可能是1个,但不确定是否可以看到整个数据模型)。然后,您应该能够使用一个谓词对Items实体进行简单的获取,该谓词对其相关对象的属性进行排序。

听起来您的真实对象模型是一个名为的实体,该实体名为Deal,属性名为“price”.

听起来您的真实对象模型是一个名为的实体,该实体使用名为“price”的属性进行交易。

您显然患上了SQL热。您试图将核心数据视为SQL包装器,这会把一切都搞糟

核心数据不是SQL。实体不是表。对象不是行。属性不是列。关系不是连接。核心数据是一个对象图管理系统,它可以持久化对象图,也可以不持久化对象图,还可以在后台使用SQL来持久化对象图。试图用SQL术语来理解核心数据会导致您完全误解核心数据,并导致很多悲伤和浪费时间

核心数据数据模型不应根据UI的需要或任何其他非数据需求进行配置。相反,它应该准确地建模/模拟应用程序处理的真实世界对象、事件或条件

在本例中,您正在建模:

  • 具有名称和价格的财产类型
  • 由某种id表示的项目
  • 一个或多个特定属性实例与项的一个或多个实例之间的关系 因此,您的数据模型只需要通过关系连接两个实体。您不需要“连接”,因为关系自动处理两个实体之间的连接

    最简单的模型只有一对一的关系:

    Item{
      id:string
      property<-->Property.item
    }
    
    Property{
      name:string
      price:number
      item<-->Item.property
    }
    
    如果每个
    属性
    对象可以有多个关联的
    对象:

    Item{
      id:string
      property<<-->Property.items
    }
    
    Property{
      name:string
      price:number
      items<-->>Item.properties
    }
    
    项目{
    id:字符串
    propertyItem.properties
    }
    

    如何配置排序描述符取决于关系的详细信息以及tableview将显示的实体对象

    您显然患了严重的SQL热。您试图将核心数据视为SQL包装器,这会把一切都搞糟

    核心数据不是SQL。实体不是表。对象不是行。属性不是列。关系不是连接。核心数据是一个对象图管理系统,它可以持久化对象图,也可以不持久化对象图,还可以在后台使用SQL来持久化对象图。试图用SQL术语来理解核心数据会导致您完全误解核心数据,并导致很多悲伤和浪费时间

    核心数据数据模型不应根据UI的需要或任何其他非数据需求进行配置。相反,它应该准确地建模/模拟应用程序处理的真实世界对象、事件或条件

    在本例中,您正在建模:

  • 具有名称和价格的财产类型
  • 由某种id表示的项目
  • 一个或多个特定属性实例与项的一个或多个实例之间的关系 因此,您的数据模型只需要通过关系连接两个实体。您不需要“连接”,因为关系自动处理两个实体之间的连接

    最简单的模型只有一对一的关系:

    Item{
      id:string
      property<-->Property.item
    }
    
    Property{
      name:string
      price:number
      item<-->Item.property
    }
    
    如果每个
    属性
    对象可以有多个as