使用MKPlacemark放大MKMapView时会崩溃

时间:2009-12-17 18:01:48

标签: iphone mkmapview

我正在尝试在地图上添加地标。地标是完全在地址簿之外的地址构建的。

我的地标出现在地图上,但当我尝试捏放大时,我得到了一个崩溃:

*** -[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语句,代码没有崩溃。

知道发生了什么事吗?我猜我在地址记录中没有得到足够的信息,但错误信息确实无益。

2 个答案:

答案 0 :(得分:1)

你在某个地方过度释放了一个NSDictionary对象。这是你如何找到它:

在“项目”菜单下,选择“编辑活动可执行文件”。在“参数”选项卡中,将项添加到“要在环境中设置的变量:”块中,其名称为NSZombieEnabled,值为YES

快乐的僵尸狩猎。

答案 1 :(得分:1)

在创建它时和将它传递给MKPlacemark的init方法之间是否发生了theAddress NSDictionary的事情?我问,因为你的代码似乎正在崩溃,因为你的代码试图将CALayer对象视为一个集合类(就像它有一个objectForKey:方法),并且是唯一的集合类我看到那里有那个地址字典。