【问题标题】:NSCounted set ignoring a property [duplicate]NSCounted 设置忽略属性[重复]
【发布时间】:2015-06-10 14:44:53
【问题描述】:

我正在尝试执行NSCountedSet 但我需要忽略一个属性,我尝试覆盖我的对象的isEqual 方法,并手动比较所有属性,除了我想忽略但它不起作用

你知道如何实现它吗?

更新

我的班级

@interface GSOrderMenuMenuContent : GSBaseModel

@property (copy, nonatomic) NSNumber        *order_content_id;
@property (copy, nonatomic) NSNumber        *item_id;

@property (copy, nonatomic) NSNumber        *price;
@property (copy, nonatomic) NSNumber        *priceWithModifiers;

@property (copy, nonatomic) NSString        *course;
@property (copy, nonatomic) NSString        *itemName;

@property (nonatomic) GSMenuItem*           item;
@property (nonatomic) NSMutableArray        *modifiers;

@property (copy, nonatomic) NSNumber        *isAlreadyPrinted;

@property (copy,nonatomic)  NSNumber        *isDeleted;

-(GSOrderMenuMenuContent*)deepCopy;

-(GSOrderContent*)  orderContent;

-(BOOL)isEqual:(GSOrderMenuMenuContent*)object;
@end

用法:

    NSCountedSet* countedSet    = [[NSCountedSet alloc] initWithArray:contents];

其中 contents 是一个类对象数组

isEqual 添加断点不会被调用(但是,如果执行[NSarray containsObject:...] 则会调用

【问题讨论】:

  • 显示您的课程以及NSCountedSet 的一些示例用法。
  • 好的,所以。您试图忽略的属性是什么?你对isEqual 的实现是什么?为什么你使用NSNumber 对象而不是原始类型?
  • isEqual: 方法和hash 方法的实现来更新你的问题(你也正确地实现了hash,对吧?)。
  • 哦,我不知道哈希方法,我去看看
  • 为什么NSNumber 属性定义为copy?没有任何意义,因为没有可变的 NSNumber 类可以分配给其中之一。

标签: ios objective-c nscountedset


【解决方案1】:

正如isEqual: 方法的文档中所述,您必须始终实现相应的hash 方法。这两种方法必须始终一起实现。

比较相等的两个对象也必须返回相同的hash 值。

【讨论】:

  • 这个问题明显是骗人的,为什么还要回答?
  • 如果它明显是一个骗子,你在哪里投票结束作为一个骗子? :) 诚然,有时我会忘记先搜索。
猜你喜欢
  • 1970-01-01
  • 2020-12-17
  • 1970-01-01
  • 1970-01-01
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 2018-10-31
  • 1970-01-01
相关资源
最近更新 更多