Crash when zooming into a MKMapView with a MKPlacemark

感情迁移 提交于 2019-12-08 10:43:10

问题


I'm trying to add a placemark to a map. The placemark is built from an address completely outside of Address Book.

My placemark is appearing on the map, but when I try to pinch to zoom in I get a crash:

*** -[CALayer objectForKey:]: unrecognized selector sent to instance 0x4569dc0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[CALayer objectForKey:]: unrecognized selector sent to instance 0x4569dc0'

Here's how I'm setting up the address:

id theAddress = [NSDictionary dictionaryWithObjectsAndKeys:
                 [NSString stringWithFormat: @"%@ - %@", theAddress1 ? theAddress1 : @"", theAddress2 ? theAddress2 : @""], kABPersonAddressStreetKey,
                 theCity ? theCity : @"", kABPersonAddressCityKey,
                 theState ? theState : @"", kABPersonAddressStateKey,
                 theZip ? theZip : @"", kABPersonAddressZIPKey,
                 theCountry ? theCountry : @"", kABPersonAddressCountryKey,
                 nil];

I use the values in the address record to find the coordinate for the address (learned how to do this from this question & answer), then I add it to my map:

[mapView addAnnotation: [[[MKPlacemark alloc] initWithCoordinate: theCoordinate
                                               addressDictionary: theAddress] autorelease]];

The crash definitely seems to be caused by this MKPlacemark, as if I comment out the addAnnotation statement the code doesn't crash.

Any idea what's going on? I'm guessing I haven't got enough in the address record, but the error message is really unhelpful.


回答1:


You're over-releasing an NSDictionary object somewhere. Here's how you find it:

Under the Project menu, select 'Edit Active Executable'. In the Arguments tab, add an item to the "Variables to be set in the environment:" block with the name NSZombieEnabled and the value YES.

Happy Zombie Hunting.




回答2:


Is something happening to that theAddress NSDictionary between when you create it and when you pass it to MKPlacemark's init method? I ask because it seems like you're crashing because your code is trying to treat a CALayer object like it's a collection class (that is, like it has an objectForKey: method), and the only collection class I see in there is that address dictionary.



来源:https://stackoverflow.com/questions/1923525/crash-when-zooming-into-a-mkmapview-with-a-mkplacemark

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!