gpt4 book ai didi

ios - NSMutableDictionary 键找不到对象

转载 作者:行者123 更新时间:2023-11-29 03:32:05 26 4
gpt4 key购买 nike

我的 iOS 应用程序中有以下方法。声明:

GMSMarker *marker = [places objectForKey:place];

并不总能找到关键的对象,当我明确知道有一个对象要找到时。

方法是:

- (void)removePlacesOfType:(AmenityType)type {
NSMutableArray* objectsToRemove = [[NSMutableArray alloc] init];

for (Place *place in places) {
if (place.type == type) {
GMSMarker *marker = [places objectForKey:place];
NSLog(@"%@ /// %@",place, marker);
marker.map = nil;
[objectsToRemove addObject:place];
}
}
[places removeObjectsForKeys:objectsToRemove];
}

更新为包含对象转储:

2013-10-28 13:11:20.988 Trancierge[12881:70b] **Pre For-Loop

2013-10-28 13:11:20.989 Trancierge[12881:70b] Markers built: 16
2013-10-28 13:11:20.989 Trancierge[12881:70b] <GMSMarker: 0x1b29cd30> (null) (-27.475179, 153.016384), <UIImage: 0x9e45680>
2013-10-28 13:11:20.989 Trancierge[12881:70b] <GMSMarker: 0x1b2b3550> (null) (-27.477081, 153.012322), <UIImage: 0x9e45680>
2013-10-28 13:11:20.990 Trancierge[12881:70b] <GMSMarker: 0x1b27d9c0> (null) (-27.477321, 153.012479), <UIImage: 0x9e45680>
2013-10-28 13:11:20.990 Trancierge[12881:70b] <GMSMarker: 0x1b2b2d80> (null) (-27.477032, 153.013461), <UIImage: 0x9e45680>
2013-10-28 13:11:20.990 Trancierge[12881:70b] <GMSMarker: 0x1b27d6f0> (null) (-27.474801, 153.016204), <UIImage: 0x9e45680>
2013-10-28 13:11:20.990 Trancierge[12881:70b] <GMSMarker: 0x1b27deb0> (null) (-27.476008, 153.013956), <UIImage: 0x9e45680>
2013-10-28 13:11:20.990 Trancierge[12881:70b] <GMSMarker: 0x1b27e0b0> (null) (-27.476420, 153.012121), <UIImage: 0x9e45680>
2013-10-28 13:11:20.991 Trancierge[12881:70b] <GMSMarker: 0x1b27e2e0> (null) (-27.477069, 153.012231), <UIImage: 0x9e45680>
2013-10-28 13:11:20.991 Trancierge[12881:70b] <GMSMarker: 0x1b27e510> (null) (-27.477887, 153.012734), <UIImage: 0x9e45680>
2013-10-28 13:11:20.991 Trancierge[12881:70b] <GMSMarker: 0x1b27e740> (null) (-27.477337, 153.012621), <UIImage: 0x9e45680>
2013-10-28 13:11:20.991 Trancierge[12881:70b] <GMSMarker: 0x1b27e970> (null) (-27.475651, 153.013364), <UIImage: 0x9e45680>
2013-10-28 13:11:20.992 Trancierge[12881:70b] <GMSMarker: 0x1b27eba0> (null) (-27.477033, 153.013458), <UIImage: 0x9e45680>
2013-10-28 13:11:20.992 Trancierge[12881:70b] <GMSMarker: 0x1b27edd0> (null) (-27.476088, 153.016655), <UIImage: 0x9e45680>
2013-10-28 13:11:20.992 Trancierge[12881:70b] <GMSMarker: 0x1b27f000> (null) (-27.475618, 153.016321), <UIImage: 0x9e45680>
2013-10-28 13:11:20.992 Trancierge[12881:70b] <GMSMarker: 0x1b27f240> (null) (-27.477225, 153.016497), <UIImage: 0x9e45680>
2013-10-28 13:11:20.992 Trancierge[12881:70b] <GMSMarker: 0x1b27f480> (null) (-27.477740, 153.012813), <UIImage: 0x9e45680>

2013-10-28 13:11:20.993 Trancierge[12881:70b] **In For-Loop

2013-10-28 13:11:20.993 Trancierge[12881:70b] <Place: 0x1b2bce90> /// (null)
2013-10-28 13:11:20.993 Trancierge[12881:70b] <Place: 0x1b2b5100> /// <GMSMarker: 0x1b2b3550> (null) (-27.477081, 153.012322), <UIImage: 0x9e45680>
2013-10-28 13:11:20.993 Trancierge[12881:70b] <Place: 0x1b2b2d60> /// (null)
2013-10-28 13:11:20.993 Trancierge[12881:70b] <Place: 0x1b27d630> /// (null)
2013-10-28 13:11:20.993 Trancierge[12881:70b] <Place: 0x1b27d7e0> /// (null)
2013-10-28 13:11:20.994 Trancierge[12881:70b] <Place: 0x1b27df90> /// (null)
2013-10-28 13:11:20.994 Trancierge[12881:70b] <Place: 0x1b27e1c0> /// (null)
2013-10-28 13:11:20.994 Trancierge[12881:70b] <Place: 0x1b27e3f0> /// (null)
2013-10-28 13:11:20.994 Trancierge[12881:70b] <Place: 0x1b27e620> /// <GMSMarker: 0x1b27e510> (null) (-27.477887, 153.012734), <UIImage: 0x9e45680>
2013-10-28 13:11:20.994 Trancierge[12881:70b] <Place: 0x1b27e850> /// (null)
2013-10-28 13:11:20.994 Trancierge[12881:70b] <Place: 0x1b27ea80> /// <GMSMarker: 0x1b27e970> (null) (-27.475651, 153.013364), <UIImage: 0x9e45680>
2013-10-28 13:11:20.995 Trancierge[12881:70b] <Place: 0x1b27ecb0> /// <GMSMarker: 0x1b27eba0> (null) (-27.477033, 153.013458), <UIImage: 0x9e45680>
2013-10-28 13:11:20.995 Trancierge[12881:70b] <Place: 0x1b27eee0> /// (null)
2013-10-28 13:11:20.995 Trancierge[12881:70b] <Place: 0x1b27f120> /// (null)
2013-10-28 13:11:20.995 Trancierge[12881:70b] <Place: 0x1b27f360> /// (null)
2013-10-28 13:11:20.995 Trancierge[12881:70b] <Place: 0x1b27f5a0> /// (null)

最佳答案

添加到 NSDictionary 的 key 应始终符合 NSCopying 协议(protocol)。默认实现将创建关键对象的新实例(放在您的案例中)。

解决方案是在“Place”自定义类中遵守并实现 NSCopying 协议(protocol)并返回 self。这样关键实例在任何地方都是相同的。

- (id)copyWithZone:(NSZone *)zone
{
return self;
}

关于ios - NSMutableDictionary 键找不到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19626370/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com