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 protected])

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to