Previous | Next | WireHose Developers Guide |
The mapping model does a fairly good job of translating the XML
input into dictionaries, but it has some quirks, and WHImporter's
insertResources
expects those dictionaries to be in a
particular format. The importer needs a cleanSnapshots
method which will fix what we get from
fetchDictionaryFromURL
.
static NSMutableArray cleanSnapshots(Object whatWeFound) { NSMutableArray snapshots; // "forcelist" in the mapping model is unreliable // sometimes we get a single object, so pack it into an array if (whatWeFound instanceof NSArray) { snapshots = (NSMutableArray)whatWeFound; } else { snapshots = new NSMutableArray(whatWeFound); } NSMutableDictionary snapshot; NSKeyValueCoding tags; // iterate through snapshots // for each snapshot, extract tags from content key for (int i=0, count=snapshots.count(); i<count; i++) { snapshot = (NSMutableDictionary)snapshots.objectAtIndex(i); tags = (NSKeyValueCoding)snapshot.objectForKey("tags"); if (tags != null) { // tags will be either a dictionary with one key "id" // mapping to a string indicating the tagpath, // or an array of dictionaries, each with an "id" key. // Calling valueForKey on an array will construct a new // array with the results of calling valueForKey on each // object in the old array... nice. // So we end up with either a string, or an array of strings snapshot.setObjectForKey(tags.valueForKey("id"), "tags"); snapshots.replaceObjectAtIndex(snapshot, i); } } return snapshots; }
The mapping model specifies that RSS items should be mapped to
a list through its forceList
property. Sometimes the
XML importer returns a single item instead of a list, so this
method will pack the object into an array.
The RSS 2.0 format specifies that <category> is a
container element. The contentsKey
property in the
mapping model specifies that the XML importer should map a
category to a dictionary with a single key, "id", which maps to
the name of the category itself. If an item has multiple category
entries, then the importer will return an array of dictionaries.
The cleanSnapshots
method extracts the category (or
categories) from the dictionary (or dictionaries).
Copyright ©2000-2003 Gary Teter. All rights reserved. WireHose is a trademark of Gary Teter.