views:

49

answers:

1

I'm developing an iPhone application that will access XML files (or something similar) from a server. I want to convert that data into a slick, native UI on the iPhone. With my current knowledge I could already do this by loading the files, parsing them, writing custom code to fill in data structures and convert the data into user interface elements. However, since I know this is a common problem in iPhone development, I'm inclined to think that there is a simpler method that could abstract some of the process.

What's the best and most appropriate way to write a hybrid app without reinventing the wheel?

A: 

There are a few ready-made abstractions, but most of them focus on XMLRPC, which tends to get a bit clunky.

Your best bet is probably to write an NSXMLParserDelegate, which is straightforward enough; and then simply create your parser using -initWithContentsOfURL:. With this method, loading the XML files and parsing them becomes one step; and you create your data structures as you go. Conversion to UI elements happen with the usual abstraction mechanisms (dataSource and delegate).

This frees you from the constraint of externally imposed XML Schema, but it predicates that your XML files are relatively lightweight, or there might be (significant) interface lag. It can be sensible to load in the XML on a separate thread and reload your interface as more data becomes available (tho' not too often), especially if the files are more than a couple of KiB each.

Edit: A few notes: On the whole you want to avoid UIWebView if you are doing anything even remotely complex. It's not as fast as native controls, and the look and feel of result applications is usually just a little off.

Also, it sounds to me like what you want is more or less an XML-file => UITableView type application, or at least something conceptually similar. This is really easy to build; the trickiest part is figuring out an XML format that contains the information you want without getting bloated. In fact, I'd recommend you start there; just an XML consumer and a Navigation Controller; using that as a starting point should let you check that your structure is sane and that the files aren't too big; which brings us to another problem with using UIWebView:

You have no control over the caching, especially if you process or get the files using JS. This is fine for most web browsing, where WebKit usually does the right thing, especially when faced with sane web server configurations (well, not the actual configs, but the practical results of the configuration: sane headers).

When you use a custom-built parser and caching system, you have a greater degree of control, and a lot of tricks you can use to ensure that you never download more than you strictly speaking need.

Williham Totland
This is the approach that seemed most apparent to me.What I was hoping for was a way to write, almost exclusively, in some markup language and have my app build a native interface based on the external file. Basically a web view with more native-like controls. This, however, conflicts with what Steve Jobs believes is the proper use of cloud computing (see Jobs, Gates interview on YouTube). I hoped nonetheless.What I would still like to know is if there exists a well-defined design pattern for implementing the above method.
jedavis
`In summary:` Avoid hybrid applications; and start with getting the basic data transfer exercise done: Once you have a navigation view that shows the basic structure of the data you are attempting to show correctly, do the interface design. With gusto!
Williham Totland