Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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
Objective c 将NSManagedObject的项从NSArray传输到NSSet_Objective C_Ios_Nsarray_Duplicates_Nsset - Fatal编程技术网

Objective c 将NSManagedObject的项从NSArray传输到NSSet

Objective c 将NSManagedObject的项从NSArray传输到NSSet,objective-c,ios,nsarray,duplicates,nsset,Objective C,Ios,Nsarray,Duplicates,Nsset,两个相关问题: 使用[NSSet setWithArray:时,是否会自动删除重复的对象 您如何准确地说出“复制”的含义?也就是说,如果您有一堆“大学课程”对象,每个对象都有一个名称和节号,并且您希望转移到NSSet,则只保留一个大学课程作为给定名称(例如,如果你有三节微积分,你会如何告诉它只保留一节微积分,即使它们的节数不同,因此默认情况下它们并不相同) 谢谢!如果那个问题一点也不清楚,请告诉我。我想不出用什么词来表达它 编辑:此问题特定于NSManagedObjects,其isEqual:方

两个相关问题:

  • 使用
    [NSSet setWithArray:
    时,是否会自动删除重复的对象

  • 您如何准确地说出“复制”的含义?也就是说,如果您有一堆“大学课程”对象,每个对象都有一个名称和节号,并且您希望转移到NSSet,则只保留一个大学课程作为给定名称(例如,如果你有三节微积分,你会如何告诉它只保留一节微积分,即使它们的节数不同,因此默认情况下它们并不相同)

  • 谢谢!如果那个问题一点也不清楚,请告诉我。我想不出用什么词来表达它

    编辑:此问题特定于NSManagedObjects,其
    isEqual:
    方法无法重写

  • 从:

    如果同一对象在数组中出现多次,则会添加该对象 仅返回一次返回集

  • 这里使用
    -isEqual:
    方法(和
    -hash
    方法)确定相等性。如果希望两个自定义对象被视为相等,则应适当地重写它们,并且必须同时重写这两个对象。通常使用这些对象,以便可以将真正相等且通常可互换的对象(但是单独的对象)视为相等的对象。在您的示例中,听起来像是大学课程对象“不同”(即,它们代表不同的类,即使它们可能共享相同的总体“微积分”主题),因此将这些对象实例称为“相等”似乎有问题如果这是一个大规模的项目/代码库。在这种情况下,您可以考虑逐个添加对象,并在添加时进行自己的比较,以确保获得每个“主题”中的一个。


  • 抱歉,这是一个糟糕的例子,这正是我头脑中想出来的。我可以覆盖isEqual,并将研究
    散列
    函数。以前从未听说过它。(显然是iOS新手)@Mason:Cool。重写时,通常很容易通过使用的任何内部数据的哈希值来进行相等性区分,比如带有课程名称的字符串的哈希值。对于“相等”,哈希值必须相同对象,但它不必是唯一的。哦,增加了复杂性。我使用的对象是NSManagedObject,因此覆盖
    isEqual:
    ,是非法的。我想这会改变一点问题。有什么提示吗?@Mason:是的,在添加到集合时进行您自己的唯一化。:)核心数据控制被管理对象的平等性,所以你不能重新定义平等意味着什么。我将在对象上实现您自己的自定义
    -compareMe
    方法,然后在手动循环数组、向集合中添加对象时,使用内部循环检查集合中已有的内容是否使用新方法进行比较。可能有一种简单的方法来简化这些循环,但不确定。