Re: Array annotation strangeness
Re: Array annotation strangeness
- Subject: Re: Array annotation strangeness
- From: Fritz Anderson <email@hidden>
- Date: Wed, 09 May 2012 13:47:54 -0500
On 9 May 2012, at 1:09 PM, Alex Zavatone wrote:
> Back on iterating through a mapKit annotation array, I'm bending my brain cell on this one.
>
> All my annotations are instances of the MyLocation class
>
> I added a method to expose the properties I want to save by returning a dict to the class.
>
> After all annotations are added, and I want to walk the array and build an array of annotations, I do this:
>
> - (IBAction)saveData:(id)sender
> {
> for (NSDictionary * myAnnotation in self.mapView.annotations)
Assuming .mapView is an MKMapView, then .annotations is an NSArray of objects that conform to <MKAnnotation>. From what you say, the objects in the array are of class MyLocation, which I gather is not a subclass of NSDictionary. (Leave aside that subclassing NSDictionary is ill-advised.)
Therefore your declaration of the myAnnotation loop variable is mistaken: Whether you declare the object pointer to be an NSDictionary or not, in point of fact the object itself is a MyAnnotation. Objective-C has no C++-like concept of producing new, converted objects upon casting.
> {
> MyLocation *tempLocation = [[MyLocation alloc] init ];
>
> // test that the methods in the MyLocation objects actually work on an empty object
> NSString *myString = [tempLocation name];
> NSDictionary *myDict = [tempLocation returnCoordinatesInDict];
> NSDictionary *myStuffDict = [tempLocation returnPropertiesInDict];
> // Try it with one of the MyLocation objects in the annotation array
> NSDictionary *myGoodsDict = [myAnnotation returnPropertiesInDict];
>
> Xcode will not let the last line compile with a "Receiver type 'NSDictionary' for instance message does not declare a method with selector 'returnPropertiesInDict'
>
> But if I comment out that line, set a breakpoint, it clearly shows that myAnnotation is a myLocation instance just like tempLocation.
Yes: a MyLocation. Not an NSDictionary. But you told the compiler that myAnnotation is an NSDictionary (even though it isn't), and it doesn't know anything different. NSDictionary does not declare a -returnPropertiesInDict method, and that's what the compiler is complaining about.
— F
--
Fritz Anderson -- Xcode 4 Unleashed: Due 21 May 2012 -- <http://x4u.manoverboard.org/>
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden