Objective c NSMutableArray containsObject方法未检测到对象
为什么它没有检测到UIButton在数组中Objective c NSMutableArray containsObject方法未检测到对象,objective-c,iphone,nsmutablearray,Objective C,Iphone,Nsmutablearray,为什么它没有检测到UIButton在数组中 编辑 事实证明,它在添加后甚至不会立即检测到它: // Add the button to the NSMutableArray. ... UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; [[self hBtns] addObject:btn]; ... // In another method, try to see if it exists. - (void)didPu
编辑 事实证明,它在添加后甚至不会立即检测到它:
// Add the button to the NSMutableArray.
...
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[[self hBtns] addObject:btn];
...
// In another method, try to see if it exists.
- (void)didPushBtn:(id)sender
{
UIButton *btn = (UIButton *)sender;
if ([[self hBtns] containsObject:btn]) // Is false every time.
...
}
听起来像是
isEqual:
比较失败了。你能看一下UIButton在两个位置(添加的位置,然后在didPushBtn
中)的hash
,看看它们是否是相同的值吗?听起来像是isEqual:
比较失败了。你能看一下UIButton在两个位置(添加的位置,然后在didPushBtn
中)的hash
,看看它们是否是相同的值吗?我忘了初始化数组(*doh*):
我忘记初始化数组(*doh*):
谢谢你的帮助,梅雷迪斯。散列是相同的。关于为什么isEqual:比较会失败还有其他想法吗?嘿,Meredith,看我对这个问题的编辑。也许这会有帮助。没关系,想清楚了(见下文)。谢谢你的帮助,我很感激!谢谢你的帮助,梅雷迪斯。散列是相同的。关于为什么isEqual:比较会失败还有其他想法吗?嘿,Meredith,看我对这个问题的编辑。也许这会有帮助。没关系,想清楚了(见下文)。谢谢你的帮助,我很感激!这实际上是我的下一个建议。很高兴您对它进行了排序。您还应该确保setHBtns:不会保留数组,否则会出现内存泄漏。或者,它应该保留数组,他可以使用
[NSMutableArray array with capacity:0]
(或者干脆[NSMutableArray array]
)。在我看来,更大的问题是属性是否应该是只读的
,数组是否应该在包含类的初始值设定项中创建一次。[slapshhead]。很高兴你分享了这个问题和答案-同样的问题让我发疯。这实际上是我的下一个建议。很高兴您对它进行了排序。您还应该确保setHBtns:不会保留数组,否则会出现内存泄漏。或者,它应该保留数组,他可以使用[NSMutableArray array with capacity:0]
(或者干脆[NSMutableArray array]
)。在我看来,更大的问题是属性是否应该是只读的
,数组是否应该在包含类的初始值设定项中创建一次。[slapshhead]。很高兴你分享了这个问题和答案——同样的问题让我发疯。
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[[self hBtns] addObject:btn];
if ([[self hBtns] containsObject:btn]) // Returns false.
[self setHBtns:[[NSMutableArray alloc] initWithCapacity:0]];