On May 8, 2012, at 5:53 PM, Conrad Shultz wrote: > On 5/8/12 2:35 PM, Alex Zavatone wrote: >> Well, I had a similar problem saving the information to a JSON file >> and had to rebuild the dictionary without the CLLocationCoordinate2D >> struct, before NSJSONSerialization would serialize the dictionary. >> >> The reason I think it's a struct is that's how it's defined in >> CLLocation.h and right now in the debugger, annotation is showing as >> (struct objc_object * const), which sorta conflicts with what you >> wrote (TTBOMK). >> >> Here are the details from CLLocation.h: > > No one disputes that CLLocationCoordinate2D is a struct. What Jens is > saying is that you can't store an unwrapped struct in a Cocoa collection > - be it a dictionary, array, or set. > > What's getting lost in translation here is that -annotations is an array > of objects of type id <MKAnnotation>. > > What sort of object conforming to MKAnnotation are you adding to your > annotations array? Whatever it is, it must have a -coordinate property. > It is *this* property this is a CLLocationCoordinate2D struct. This is > how the data is getting stored in a Cocoa collection. > > In any event, I don't see how you could directly serialize your > annotation object to a JSON object for exactly the reason Jens described > (i.e. type incompatibility). > > If you need to convert to JSON you could, for example, write an > NSValueTransformer that converts your id <MKAnnotation> to an > NSDictionary that is compliant with NSJSONSerialization requirements.
It looks like my mentioning JSON serialization added to the lack of clarity of my email, but it is another issue entirely. I just used it as a reference problem since I ran into this issue with structs before causing JSONSerialization to barf. In this case, I was/am trying to write out an MapKitView's annotation array as an array or a dict with writeToFile to create a pList, and at some point, read it back in to restore the annotationList. I was under the tragically misinformed understanding that since a mapKitView's annotations array was already an array, that I could either write it out to a file directly (on iOS) or declare a key, add it to a dictionary and write it out without doing much of anything special. When I add my annotations to the mapView's annotations, I'm doing it like so: CLLocationCoordinate2D coordinate; coordinate.latitude = latitude.doubleValue; coordinate.longitude = longitude.doubleValue; MyLocation *annotation = [[MyLocation alloc] initWithName:title address:address coordinate:coordinate]; [self.mapView addAnnotation:annotation]; MyLocation conforms to <MKAnnotation> and is where I have coordinate defined as type CLLocationCoordinate2D. I'll just walk the annotations array as before, and create another array or dict that will write out a valid dict or array. Then I'll go over the CoreData samples which seem to address this, or as you suggested, learn the NSTransform bits. Thanks both of you. - Alex _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) 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 arch...@mail-archive.com