I'm trying to parse data received from a service using the framework Mantle. The json has nested data and I am having problems to parse it. The json is like the following:
{
"sections": [
{
"title": "title1",
"level": 1,
"content": [
{
"type": "type1",
"text": "text1"
}
],
"images": []
},
{
"title": "title2",
"level": 2,
"content": [
{
"type": "type2",
"text": "text2"
},
{
"type": "type9",
"text": "text9"
},
{
"type": "type4",
"text": "text4"
},
{
"type": "type6",
"text": "text6"
}
],
"images": [
{
"src": "http://cvbcvcv",
"caption": "caption"
}
]
}]
}
The class that I am using is:
// MainObject.h
#interface MainObject : MTLModel <MTLJSONSerializing>
#property (strong, nonatomic) NSArray *sectionsArray;
+ (NSValueTransformer *)sectionsArrayJSONTransformer;
#end
#interface Section : MTLModel <MTLJSONSerializing>
#property (strong, nonatomic) NSString *title;
#property (assign, nonatomic) NSString *level;
#property (strong, nonatomic) NSArray *content;
#property (strong, nonatomic) NSArray *images;
+ (NSValueTransformer *)contentJSONTransformer;
+ (NSValueTransformer *)imagesJSONTransformer;
#end
#interface Content : MTLModel <MTLJSONSerializing>
#property (strong, nonatomic) NSString *type;
#property (strong, nonatomic) NSString *text;
#end
#interface Image : MTLModel <MTLJSONSerializing>
#property (strong, nonatomic) NSString *src;
#property (strong, nonatomic) NSString *caption;
#end
and
//MainObject.m
#implementation MainObject
+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
return #{
#"sectionsArray" : #"sections",};
}
+ (NSValueTransformer *)sectionsArrayJSONTransformer
{
return [MTLJSONAdapter dictionaryTransformerWithModelClass:[Section class]];
}
#end
#implementation Section
+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
return #{
#"title" : #"title",
#"level" : #"level",
#"content" : #"content",
#"images" : #"images",};
}
+ (NSValueTransformer *)contentJSONTransformer
{
return [MTLJSONAdapter arrayTransformerWithModelClass:[Content class]];
}
+ (NSValueTransformer *)imagesJSONTransformer
{
return [MTLJSONAdapter arrayTransformerWithModelClass:[Image class]];
}
#end
#implementation Content
+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
return #{
#"type" : #"type",
#"text" : #"text",};
}
#end
#implementation Image
+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
return #{
#"src" : #"src",
#"caption" : #"caption",};
}
#end
Then, when I make the call to the service and try to parse the json with the following code, being responseObject the data obtained from server, the data appears nil:
for (NSArray *array in [responseObject valueForKey:#"sections"]) {
NSArray *seccionArray = [MTLJSONAdapter modelsOfClass:[Section class] fromJSONArray:array error:nil];
}
I have tried a lot of ways to parse this data well, but the app always crashes or returns nil. I hope you can help me to solve this
Why can't just one line using NSJSONSerialization?
NSMutableDictionary *yourArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
Then you fetch what you want from your array...
Related
I have a JSON that looks like this :
{
"club": [
{
"titles": "1",
"league": "epl",
"country": "england",
}
}
And I have created a property like this :
#property (strong, nonatomic) NSMutableArray <Clubs> *club;
The club property inherits from the Clubs class which has the titles, leagues and country properties.
When I try to create a dictionary with that data model, I am unable to access the properties inside the club array.
Am I creating the data model incorrectly ?
Creating the dictionary:
for (NSDictionary *dictionary in responseObject) {
if (![self.searchText isEqualToString:#""]) {
self.predictiveProductsSearch = [[PerdictiveSearch alloc]initWithDictionary:dictionary error:nil];
self.predictiveTableView.dataSource = self;
[self.predictiveTableView reloadData];
self.predictiveTableView.hidden = NO;
}
}
Clubs class
#import <JSONModel/JSONModel.h>
#protocol Clubs #end
#interface Clubs : JSONModel
#property (strong, nonatomic) NSString <Optional> * titles;
#property (strong, nonatomic) NSString <Optional> * league;
#property (strong, nonatomic) NSString <Optional> * country;
#property (strong, nonatomic) NSString <Optional> * topGS;
#property (strong, nonatomic) NSString <Optional> * GoalSc;
#property (strong, nonatomic) NSString <Optional> * TransferBudget;
#end
Please use below code to achieve JSON Model saving:
_club = [[NSMutableArray alloc]init];
NSDictionary *responseObject = #{
#"club": #[
#{
#"titles": #"1",
#"league": #"epl",
#"country": #"england"
}]
};
NSArray *newResponseObject = [responseObject objectForKey:#"club"];
for (NSDictionary *dictionary in newResponseObject) {
Clubs *objClubs = [[Clubs alloc]initWithDictionary:dictionary error:nil];
[_club addObject:objClubs];
}
NSLog(#"%#",[_club objectAtIndex:0]);
which print like below :
<Clubs>
[titles]: 1
[country]: england
[GoalSc]: <nil>
[league]: epl
[topGS]: <nil>
[TransferBudget]: <nil>
</Clubs>
I'm developing an IOS application in Objective C, in which i'l call a URL to retrieve an array JSON objects (restaurants). I want to parse them onto a objective-C Model. Using them to populate on to a UICollectionView that i have already designed. My task requires me to design this model to store the Json objects and then use them to populate onto UICollectionView. I don't know how to achieve this in Objective-C, please help me on this. The JSON retrieved is as follows.
"restaurants" : [
{
"name": "Burger Bar",
"backgroundImageURL": "http://somthing.com/Images/1.png",
"category" : "Burgers",
"contact": {
"phone": "1231231231",
"formattedPhone": "(123) 123-1231",
"twitter": "1twitter"
},
"location": {
"address": "5100 Belt Line Road, STE 502",
"crossStreet": "Dallas North Tollway",
"lat": 32.950787,
"lng": -96.821118,
"postalCode": "75254",
"cc": "US",
"city": "Addison",
"state": "TX",
"country": "United States",
"formattedAddress": [
"5100 Belt Line Road, STE 502 (Dallas North Tollway)",
"Addison, TX 75254",
"United States"
]
}
},
{
"name": "seafood Kitchen",
"backgroundImageURL": "http://somthing.com/Images/2.png",
"category": "Seafood",
"contact": {
"phone": "3213213213",
"formattedPhone": "(321) 321-3213",
"twitter": "2twitter"
},
"location": {
"address": "18349 Dallas Pkwy",
"crossStreet": "at Frankford Rd.",
"lat": 32.99908456526653,
"lng": -96.83018780592823,
"postalCode": "33331",
"cc": "US",
"city": "Dallas",
"state": "TX",
"country": "United States",
"formattedAddress": [
"18349 Dallas Pkwy (at Frankford Rd.)",
"Dallas, TX 75287",
"United States"
]
}
}
]
Below code shows how to call URL and retrieve and print the parse JSON objects.
NSString *urlString = #"http://somthing.com/Images/collection.json";
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
if (!error) {
NSError* parseError;
id parse = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&parseError];
NSLog(#"%#", parse);
}
}];
How to create the restaurant data model. Or is there any other way to go about this?
There's no need for any external library whatsoever. Look at the data that you get, and it's obvious that you want a class each representing a contact, a location, a restaurant, and you want to translate the JSON response into an array of restaurants. It's obvious what properties the contact, location and restaurant should have.
For each of the classes, you don't want the init method at all, so declare an init method with flags that make its use illegal. For each class, declare a method initWithJSONDictionary:(NSDictionary*)dict which takes the appropriate dictionary as an argument, extracts all the properties from the dictionary, logs if the values are not what you expect and returns nil if the data is faulty.
Use NSJSONSerialization to parse the complete JSON data, check that it's an array and each array element is a dictionary, and call [[MyRestaurant alloc] initWithJSONDictionary:...] for each dictionary.
That's absolutely straightforward, and for something simple like your case it should take you an hour or two to write bullet proof code for this.
You could use Json2Model from here https://github.com/fredlo2010/Json2Model
It would generate 4 object for you:
Restaurants.h
Restaurant.h
Contact.h
Location.h
Here is an example of Contact.h and Contact.n
#import <Foundation/Foundation.h>
#interface Contact : NSObject
#property (strong, nonatomic) NSString *twitter;
#property (strong, nonatomic) NSString *phone;
#property (strong, nonatomic) NSString *formattedPhone;
- (instancetype) initWithTwitter: (NSString *)twitter andPhone: (NSString *)phone andFormattedPhone: (NSString *)formattedPhone;
#end
#import "Contact.h"
#implementation Contact
- (instancetype) initWithTwitter: (NSString *)twitter andPhone: (NSString *)phone andFormattedPhone: (NSString *)formattedPhone {
self = [super init];
if (self) {
self.twitter = twitter;
self.phone = phone;
self.formattedPhone = formattedPhone;
}
return self;
}
#end
Use JSONModel https://github.com/icanzilb/JSONModel
.h file
#import "JSONModel.h"
#interface location : JSONModel
{
}
#property (nonatomic,strong) NSString *address;
#property (nonatomic,strong) NSString *crossStreet;
#property (nonatomic,strong) NSString *lat;
#property (nonatomic,strong) NSString *lng;
#property (nonatomic,strong) NSString *postalCode;
#property (nonatomic,strong) NSString *cc;
#property (nonatomic,strong) NSString *city;
#property (nonatomic,strong) NSString *state;
#property (nonatomic,strong) NSString *country;
#property (nonatomic,strong) NSArray *formattedAddress;
#end
#interface contact:JSONModel
{
}
#property (nonatomic,strong) NSString *phone;
#property (nonatomic,strong) NSString *formattedPhone;
#property (nonatomic,strong) NSString *twitter;
#end
#interface Restaurant : JSONModel
#property (nonatomic,strong) location *objectLocation;
#property (nonatomic,strong) contact *objContact;
#property (nonatomic,strong) NSString *name;
#property (nonatomic,strong) NSString *backgroundImageURL;
#property (nonatomic,strong) NSString *category;
#end
.m file
#implementation Restaurant
-(id)init{
self = [super init];
if (self) {
_category = #"";
_name = #"";
_backgroundImageURL = #"";
}
return self;
}
#end
#implementation contact
-(id)init{
self = [super init];
if (self) {
_phone = #"";
_formattedPhone = #"";
_twitter = #"";
}
return self;
}
#end
#implementation location
-(id)init{
self = [super init];
if (self) {
_address = #"";
_crossStreet = #"";
_lat = #"";
_lng= #"";
_postalCode = #"";
_city = #"";
_state = #"";
_cc = #"";
_country = #"";
}
return self;
}
//objects is the response object
NSArray* models = [Restaurant arrayOfModelsFromDictionaries: objects];
Store the array of restaurants from json in your model object and then you can retrieve the data required for your collection view from model so that all parsing stuff will remain in your model.
.h
#interface Model : NSObject
#property(nonatomic,strong)NSArray *restaurants;
#end
.m
#implementation Model
-(NSIteger)getRestaurantsCount{
return restaurants.count;
}
//getRestaurantAtIndex:
//getRestaurantNameAtIndex:
#end
Looking at the example JSON, you are getting an array of restaurants according to the [ ] brackets. You can retrieve the array with this:
NSArray *restArray= [parse objectForKey:#"restaurants"];
Now you want to loop through that array and parse the structure like the following:
for (NSDictionary *restaurant in restArray){
NSString* name = [restaurant objectForKey:#"name"];
NSDictionary* location = [restaurant objectForKey:"location"];
//etc...
}
You can parse the data you get in your callback to NSDictionary object:
NSData *response = someData; // data you are getting in callback
NSError *error;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:response options:kNilOptions error:&error];
NSArray *restaurants = [json objectForKey:#"restaurants"];
Checkout this repo, it also comes with easy coredata integration
https://github.com/BadChoice/daikiri
Hi I am getting parsed nested JSON, which has many levels. I am able to get at first level value.
How could i use same model class to fetch all nested JSON values using recursion.
My JSON is -
{
"message": "Ok",
"STATUS_CODE": "200",
"REQUEST": {
"userid": "12436124",
"command": "GETCATEGORY"
},
"RESPONSE": {
"Category": [
{
"type": "Tag",
"categoryId": 11,
"name": "Electronics",
"catIconLeft": "",
"catIconRight": "",
"parentId": 0,
"Category": [
{
"type": "Category",
"categoryId": 84,
"name": "Mobile Accessories",
"parentId": 1,
"catIconLeft": "",
"catIconRight": "",
"Category": [
{
"type": "Product",
"categoryId": 90,
"name": "Headsets",
"catIconLeft": "",
"catIconRight": "",
"parentId": 9
},
<----so on------>
The complete Parsed JSON LINK
My Code for parsing-
-(void)call_CategoryListData{
[params setObject:#"command" forKey:#"GETCATEGORY"];
[params setObject:#"userid" forKey:#"12436124"];
[serverCall actionmethod:Fake_Category parameters:params onComplete:^(NSMutableDictionary* results){
if ([results isKindOfClass:[NSDictionary class]] || [results isKindOfClass:[NSMutableDictionary class]]){
//DDLogVerbose(#"\n\n\n\n\nResult----->%#",results);
NSMutableDictionary*responseDic=[results objectForKey:#"RESPONSE"];
NSMutableArray*catArray=[responseDic objectForKey:#"Category"];
for (NSMutableDictionary *dic in catArray) {
NSMutableArray* tmp = [dic objectForKey:#"Category"];
if (tmp) {
MyCategory *cat = [[MyCategory alloc] init];
cat.type = dic[#"type"];
cat.categoryId = dic[#"categoryId"];
if ([cat.type isEqualToString:#"Tag"]) {
cat.name = dic[#"name"];
cat.categoryId = dic[#"categoryId"];
[CatTag addObject:cat.name];
[CatID addObject:cat.categoryId];
<---------so on --------------->
NSLog(#"New Objects--->%#\n\n----->%#",CatTag,CatID);
}
}
}
}
}
onError:^(NSError *error) {
// handle error here
}];
}
My Model Class-
#interface MyCategory : NSObject
#property (nonatomic, strong) NSString *type;
#property (nonatomic, strong) NSString *name;
#property (nonatomic, strong) NSString *categoryId;
#property(nonatomic,strong) NSString *catIconLeft;
#property (nonatomic,strong) NSString *catIconRight;
#property (nonatomic,strong) NSString *parentId;
#property (nonatomic, strong) MyCategory*Category;
MyCategory.h file
#interface MyCategory : NSObject
#property (nonatomic, strong) NSString *type;
#property (nonatomic, strong) NSString *name;
#property (nonatomic, strong) NSString *categoryId;
#property (nonatomic, strong) NSString *catIconLeft;
#property (nonatomic, strong) NSString *catIconRight;
#property (nonatomic, strong) NSString *parentId;
#property (nonatomic, strong) NSArray *categories;
- (id)initWithRootDictionary:(NSDictionary *)dictionary;
#end
MyCategory.m hile
#implementation
- (id)initWithRootDictionary:(NSDictionary *)dictionary
{
self = [super init];
self.type = dictionary[#"type"];
self.name = dictionary[#"name"];
self.categoryId = dictionary[#"categoryId"];
self.catIconLeft = dictionary[#"catIconLeft"];
self.catIconRight = dictionary[#"catIconRight"];
self.parentId = dictionary[#"parentId"];
if (dictionary[#"category"]) {
NSMutableArray *categories = [NSMutableArray new];
for (NSDictionary *cat in dictionary[#"category"]) {
MyCategory *category = [[MyCategory alloc] initWithRootDictionary:cat];
[categories addObject:category];
}
self.categories = categories;
}
return self;
}
#end
//...
-(void)call_CategoryListData
{
//...
NSMutableDictionary * responseDic = [results objectForKey:#"RESPONSE"];
NSMutableArray * catArray = [responseDic objectForKey:#"Category"];
NSMutableArray *result = [NSMutableArray new];
for (NSDictionary *categoryDic in catArray) {
MyCategory *category = [[MyCategory alloc] initWithRootDictionary:categoryDic];
[result addObject:category];
}
// Do something with result
}
This is a fast written code directly in this editor without any IDE, so possible some syntax errors :)
I have a problem, can't map a nested object of json. The problem is with the 'capacities' key.
This is the error:
restkit.object_mapping:RKMappingOperation.m:830 Did not find mappable relationship value keyPath 'capacities'
I know that the problem is with the mapping itself, but just can't figure what:
RKObjectMapping *capacityMapping = [RKObjectMapping mappingForClass:[Capacity class]];
[capacityMapping addAttributeMappingsFromDictionary:#{ #"capacityText" : #"capacityText",
#"priceDescriptionText" : #"priceDescriptionText",
#"priceText" : #"priceText" }];
RKObjectMapping *colorsMapping = [RKObjectMapping mappingForClass:[Colors class]];
[colorsMapping addAttributeMappingsFromDictionary:#{ #"ID" : #"idNum",
#"Name" : #"name",
#"colorHex" : #"colorHex",
#"imageUrl" : #"imageURL" }];
RKObjectMapping *deviceDataMapping = [RKObjectMapping mappingForClass:[DeviceData class]];
[deviceDataMapping addAttributeMappingsFromDictionary:#{ #"device.ID" : #"idNum",
#"device.Name" : #"name",
#"device.additionalFeatures" : #"additionalFeatures",
#"device.deviceName" : #"deviceName",
#"device.mainFeatures" : #"mainFeatures",
#"device.supportPagesLinks" : #"supportPagesLinks",
#"device.whatsInTheKit" : #"whatsInTheKit" }];
[deviceDataMapping addRelationshipMappingWithSourceKeyPath:#"capacities" mapping:capacityMapping];
[capacityMapping addRelationshipMappingWithSourceKeyPath:#"colors" mapping:colorsMapping];
[deviceDataMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:#"responseError"
toKeyPath:#"responseError"
withMapping:errorMapping]];
[[RKObjectManager sharedManager] addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:deviceDataMapping
method:RKRequestMethodGET
pathPattern:#"devices/:boneID"
keyPath:nil
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]];
This is the DeviceData class:
#interface DeviceData : NSObject
#property (nonatomic) ResponseError *responseError;
#property (copy, nonatomic) NSString *idNum;
#property (copy, nonatomic) NSString *name;
#property (copy, nonatomic) NSString *additionalFeatures;
#property (copy, nonatomic) NSString *deviceName;
#property (copy, nonatomic) NSString *mainFeatures;
#property (copy, nonatomic) NSString *supportPagesLinks;
#property (copy, nonatomic) NSString *whatsInTheKit;
#property (nonatomic) NSArray *capacities;
#property (assign, nonatomic) NSInteger boneID;
#end
This is the Capacity class:
#interface Capacity : NSObject
#property (copy, nonatomic) NSString *capacityText;
#property (nonatomic) NSArray *colors;
#property (copy, nonatomic) NSString *priceDescriptionText;
#property (copy, nonatomic) NSString *priceText;
#end
This is the Colors class:
#interface Colors : NSObject
#property (copy, nonatomic) NSString *idNum;
#property (copy, nonatomic) NSString *name;
#property (copy, nonatomic) NSString *colorHex;
#property (copy, nonatomic) NSString *imageURL;
#end
This is the json:
{
"responseError": null,
"device": {
"ID": null,
"Name": null,
"additionalFeatures": "additional features text",
"capacities": [
{
"capacityText": "16GB",
"colors": [
{
"ID": null,
"Name": null,
"colorHex": "#a68f76",
"imageUrl": "iphone_5s_black.png"
},
{
"ID": null,
"Name": null,
"colorHex": "#a9a9a9",
"imageUrl": "iphone_5s_black.png"
},
{
"ID": null,
"Name": null,
"colorHex": "#616065",
"imageUrl": "iphone_5s_black.png"
}
],
"priceDescriptionText": “iPhone 5S",
"priceText": "750$"
},{
"capacityText": “32GB",
"colors": [
{
"ID": null,
"Name": null,
"colorHex": "#a68f76",
"imageUrl": "iphone_5s_black.png"
},
{
"ID": null,
"Name": null,
"colorHex": "#a9a9a9",
"imageUrl": “iphone_5s_black.png"
},
{
"ID": null,
"Name": null,
"colorHex": "#616065",
"imageUrl": “iphone_5s_black.png"
}
],
"priceDescriptionText": “iPhone 5S",
"priceText": "750$"
}
],
"deviceName": "iPhone 5s",
"mainFeatures": “some main features text",
"supportPagesLinks": [
{
"linkText": “restore",
"linkUrl": “restore.pdf"
}],
"whatsInTheKit": "what inside the kit text"
}
}
Because your response descriptor has a nil key path and you use device.xxx in all source key paths of the deviceMapping you need to have an explicit relationship mapping so you can specify the source and destination key paths:
RKRelationshipMapping *capacitiesMapping = [RKRelationshipMapping relationshipMappingFromKeyPath:#"device.capacities" toKeyPath:#"capacities" withMapping:capacityMapping];
[deviceDataMapping addPropertyMapping:capacitiesMapping];
I'm not able to map the Images from my JSON response correctly, and I can't figure out why.
Here is error: "W restkit.object_mapping:RKObjectMappingOperation.m:244 Failed transformation of value at keyPath 'images'. No strategy for transforming from '__NSArrayM' to 'Images'"
Here is JSON:
{
"timestamp": "2013-05-10T03:09:39Z",
"feed": [{
"headline": "Head text",
"links": {
"api": {
"news": {
"href": "http://api.website.com/v1/91"
},
"self": {
"href": "http://api.website.com/v1/91"
}
},
"web": {
"href": "http://website.com/the/story"
},
"mobile": {
"href": "http://m.website.com/wireless/story?storyId=9254113"
}
},
"source": "Associated Press",
"description": "Description text.",
"images": [{
"height": 324,
"alt": "",
"width": 576,
"name": "Name text",
"caption": "Caption text.",
"url": "http://a.website.com/media/2013/0508.jpg"
}],
Feed.h
#property (nonatomic, strong) Links *links;
#property (nonatomic, strong) Images *images;
#property (nonatomic, strong) Video *video;
#property (nonatomic, strong) NSString *headline;
#property (nonatomic, strong) NSString *source;
#property (nonatomic, strong) NSDate *published;
#property (nonatomic, strong) NSString *description;
#property (nonatomic, strong) NSString *premium;
+ (RKObjectMapping *) mapping;
Feed.m
+ (RKObjectMapping *)mapping {
RKObjectMapping *objectMapping = [RKObjectMapping mappingForClass:[self class] usingBlock:^(RKObjectMapping *mapping) {
[mapping mapKeyPathsToAttributes:
#"headline", #"headline",
#"source", #"source",
#"published", #"published",
#"description", #"description",
#"premium", #"premium",
nil];
[mapping hasOne:#"links" withMapping:[Links mapping]];
[mapping hasOne:#"images" withMapping:[Images mapping]];
//[mapping hasMany:#"images" withMapping:[Images mapping]];
[mapping hasOne:#"video" withMapping:[Video mapping]];
}];
return objectMapping;
}
Images.h
#property (nonatomic, strong) NSNumber *height;
#property (nonatomic, strong) NSNumber *width;
#property (nonatomic, strong) NSString *caption;
#property (nonatomic, strong) NSURL *url;
+ (RKObjectMapping *) mapping;
Images.m
+ (RKObjectMapping *)mapping {
RKObjectMapping *objectMapping = [RKObjectMapping mappingForClass:[self class] usingBlock:^(RKObjectMapping *mapping) {
[mapping mapKeyPathsToAttributes:
#"height", #"height",
#"width", #"width",
#"caption", #"caption",
#"url", #"url",
nil];
}];
return objectMapping;
}
Everything else is mapping correctly except images. I don't know if it has to do with it being an Array but it only having one result, so its not necessarily an array? And if its not, then how I would write that... I'm just not totally clear on why its not mapping.
As you can see I tried both hasMany: and hasOne: mapping and neither worked, I got the same error.
I tried using NSLog(#"url image: %#", feedLocal.images.url);' but get(null). Even though I thought it would work becauseNSLog(#"href web: %#", feedLocal.links.web.href);` works perfectly for my links href.
Any help would be greatly appreciated, thanks so much!
In Feed.h you need to change your images property to be:
#property (nonatomic, strong) NSArray *images;
And you should set the mapping to hasMany:.