我正在尝试在地图上添加地标。地标是完全在地址簿之外的地址构建的。
我的地标出现在地图上,但当我尝试捏放大时,我得到了一个崩溃:
*** -[CALayer objectForKey:]: unrecognized selector sent to instance 0x4569dc0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[CALayer objectForKey:]: unrecognized selector sent to instance 0x4569dc0'
以下是我设置地址的方式:
id theAddress = [NSDictionary dictionaryWithObjectsAndKeys:
[NSString stringWithFormat: @"%@ - %@", theAddress1 ? theAddress1 : @"", theAddress2 ? theAddress2 : @""], kABPersonAddressStreetKey,
theCity ? theCity : @"", kABPersonAddressCityKey,
theState ? theState : @"", kABPersonAddressStateKey,
theZip ? theZip : @"", kABPersonAddressZIPKey,
theCountry ? theCountry : @"", kABPersonAddressCountryKey,
nil];
我使用地址记录中的值来查找地址的坐标(从this question & answer学习如何执行此操作),然后将其添加到我的地图中:
[mapView addAnnotation: [[[MKPlacemark alloc] initWithCoordinate: theCoordinate
addressDictionary: theAddress] autorelease]];
崩溃肯定是由这个MKPlacemark引起的,好像我注释掉了addAnnotation语句,代码没有崩溃。
知道发生了什么事吗?我猜我在地址记录中没有得到足够的信息,但错误信息确实无益。
答案 0 :(得分:1)
你在某个地方过度释放了一个NSDictionary对象。这是你如何找到它:
在“项目”菜单下,选择“编辑活动可执行文件”。在“参数”选项卡中,将项添加到“要在环境中设置的变量:”块中,其名称为NSZombieEnabled
,值为YES
。
快乐的僵尸狩猎。
答案 1 :(得分:1)
在创建它时和将它传递给MKPlacemark的init方法之间是否发生了theAddress
NSDictionary的事情?我问,因为你的代码似乎正在崩溃,因为你的代码试图将CALayer
对象视为一个集合类(就像它有一个objectForKey:
方法),并且是唯一的集合类我看到那里有那个地址字典。