Search code examples
objective-ciosxcodeflickr

Dealing with NSDictionary content parsed from Flickr


I'm having an issue properly accessing an NSDictionary built from Flickr data (the flickr.photosets.getPhotos call). Instead of just showing the content of a description tag, it reads the description tag… along with some unnecessary data and quotes.

For example:

NSLog (@"Item description readout: %@", itemDescriptionPre);

yields this response:

Item description readout: {
    "_content" = "This is a caption from a photo drawn through Flickr";
}

I've tried to modify the NSString with this

NSString *descripTruncated = [itemDescriptionPre substringFromIndex:17];

But it didn't causes a crash at runtime. It also doesn't address the items at the end of the item. I apologize since NSString modifications seem to be talked about a lot here, but I couldn't find circumstances that mirror mine.

Here is some more context to my code:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"Storing incoming data");

NSDictionary *results = [jsonString JSONValue];

NSLog(@"Building NSDictionary.");

NSArray *photos = [[results objectForKey:@"photoset"] objectForKey:@"photo"];

NSLog(@"Building array from dictionary.");

// Loop through each entry in the dictionary...
for (NSDictionary *photo in photos)
{
NSString *title = [photo objectForKey:@"title"];

    NSString *description = [photo objectForKey:@"description"];

[photoTitles addObject:title];

    [photoDescriptions addObject:description];

}

NSLog(@"Nicer display for results: %@ First image title: %@ First image description: %@", results, [photoTitles objectAtIndex:0], [photoDescriptions objectAtIndex:0]);

[self updateDisplay];

}


-(void) updateDisplay{

NSString *capTitle = [[photoTitles objectAtIndex:0] uppercaseString];

photoTitleDisplay.text = capTitle;

NSString *itemDescriptionPre = [photoDescriptions objectAtIndex:0];

NSLog (@"Item description readout: %@", itemDescriptionPre);

}

Solution

  • itemDescriptionPre is actually an NSDictionary. This should work:

    NSDictionary *itemDescriptionPre = [photoDescriptions objectAtIndex:0]; 
    NSString *itemDescription = [itemDescriptionPre objectForKey:@"_content"];