416
C
HAPTER
20 
The web: web views and internet protocols
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName {       
if ([elementName compare:@"gtopo30"] == NSOrderedSame) {
altLabel.text = [NSString stringWithFormat:@"%@ m.",gnAlt];
}
}
In general, this is a pretty simple application of lessons you’ve already learned. It’s also 
an interesting application of the internet to Core Location.
The only thing particularly innovative comes in the Core Location delegate 
B
where you create a GeoNames 
URL
using the format documented at the GeoNames 
site. Then you watch the start tags 
C
, content 
D
, and end tags 
E
, and use those to 
derive altitude the same way that you pulled out 
XML
information when you were 
reading 
RSS
feeds.
As we mentioned in chapter 17, the result should be an altitude that’s much more 
reliable than what the iPhone can currently provide, unless you’re in a tall building, in 
an airplane, or hang gliding.
To date, all of our examples of web parsing have involved simple 
GET
connections, 
where you can encode arguments as part of a 
URL
. That won’t always be the case on the 
web, and before we leave web pages behind, we’re going to return to some basics of 
URL
requests and look at how to 
POST
information to a web page when it becomes necessary. 
20.6 POSTing to the web
Many web pages will allow you to 
GET
or 
POST
information interchangeably. But there 
will also be situations when that is not the case, and you’re instead forced to 
POST
(and 
then to read back the response manually). In this section, we’re going to look at both 
how to program a simple 
POST
, and how to do something more complex, like a form.
20.6.1 POSTing by hand
When you need to 
POST
to the web, you’ll need to fall back on some 
HTML
-related 
low-level commands that we haven’t yet discussed in depth, including 
NSMutableURL-
Request
(which allows you to build a piecemeal request) and 
NSURLConnection
(which allows you to extract information from the web).
In general, you’ll follow this process:
1
Create an 
NSURL
pointing to the site that you’ll 
POST
to.
2
Create and encode the data that you plan to 
POST
, as appropriate.
3
Create an 
NSMutableURLRequest
using your 
NSURL
.
4
Use the 
NSMutableURLRequest
’s 
addValue:forHTTPHeaderField:
method to 
set a content type.
5
Set the 
NSMutableURLRequest
’s 
HTTPMethod
to 
POST
.
6
Add your data to the 
NSMutableURLRequest
as the 
HTTPBody
.
7
Create an 
NSURLConnection
using your 
NSMutableURLRequest
.
Writes 
altitude
E
Licensed to Nick Wood <nwood888@yahoo.com>
Conversion of pdf to jpg - Convert PDF to JPEG images in C#.net, ASP.NET MVC, WinForms, WPF project
How to convert PDF to JPEG using C#.NET PDF to JPEG conversion / converter library control SDK
convert pdf to jpg 100 dpi; convert pdf to 300 dpi jpg
Conversion of pdf to jpg - VB.NET PDF Convert to Jpeg SDK: Convert PDF to JPEG images in vb.net, ASP.NET MVC, WinForms, WPF project
Online Tutorial for PDF to JPEG (JPG) Conversion in VB.NET Image Application
change from pdf to jpg on; pdf to jpeg
417
POSTing to the web
8
a delegate to receive the data as it comes, as defined in the 
NSURLConnection
class reference.
9
Parse the 
NSData
you receive as you see fit.
For a simple synchronous response, listing 20.7 shows how to put these elements 
together.
NSURL *myURL = [NSURL URLWithString:@"http://www.example.com"];
NSMutableURLRequest *myRequest = [NSMutableURLRequest
requestWithURL:myURL];
[myRequest setValue:@"text/xml" forHTTPHeaderField:@"Content-type"];
[myRequest setHTTPMethod:@"POST"];
[myRequest setHTTPBody:myData];
NSURLResponse *response;
NSError *error;
NSData *myReturn = [NSURLConnection sendSynchronousRequest:myRequest
returningResponse:&response error:&error];
A large number of steps are required to move from the 
URL
through to the data 
acquisition, just as there were when creating a 
URL
for a simple 
UIWebView
, but once 
you have them down, the process is pretty easy. The hardest part, as it turns out, is 
often getting the data ready to 
POST
.
This code will work fine for posting plain data to a web page. For example, you could 
use it with the Google Spell 
API
found at http://www.google.com/tbproxy/spell to send 
XML
data and then read the results with 
NSXMLParser
.
Things can get pretty tricky if you’re doing more intricate work than that, such as 
POST
ing form data.
20.6.2 Submitting forms
Sending form data to a web page follows the same process as any other 
POST
ed data, 
and reading the results works the same way. The only tricky element is packaging up 
the form data so that it’s ready to use.
The easiest way to work with form data is to create it using an 
NSDictionary
or 
NSMutableDictionary
of keys and values, because that matches the underlying struc-
ture of 
HTML
forms. When you’re ready to process the data, you pass the dictionary to 
a method that turns it into 
NSData
, which can be sent as an 
NSMutableURLRequest
body. Once you’ve written this method the first time, you can use it again and again.
Listing 20.8 shows how to turn a dictionary of 
NSString
s into 
NSData
.
- (NSData*)createFormData:(NSDictionary*)myDictionary
withBoundary:(NSString *)myBounds {
NSMutableData *myReturn = [[NSMutableData alloc] initWithCapacity:10];
Listing 20.7 A simple POSTing example
Listing 20.8 Creating form data
Licensed to Nick Wood <nwood888@yahoo.com>
Online Convert Jpeg to PDF file. Best free online export Jpg image
start immediately to sort the files, try out some settings and then create the PDF files with the button at the bottom. The perfect conversion tool. JPG is the
batch pdf to jpg online; c# convert pdf to jpg
Online Convert PDF to Jpeg images. Best free online PDF JPEG
takes a few seconds. Web Security. Your PDF and JPG files will be deleted from our servers an hour after the conversion. No-one has
convert pdf to jpeg on; convert multi page pdf to single jpg
418
C
HAPTER
20 
The web: web views and internet protocols
NSArray *formKeys = [dict allKeys];
for (int i = 0; i < [formKeys count]; i++) {
[myReturn appendData:
[[NSString stringWithFormat:@"--%@\n",myBounds]
dataUsingEncoding:NSASCIIStringEncoding]];
[myReturn appendData:
[[NSString stringWithFormat:
@"Content-Disposition: form-data; name=\"%@\"\n\n%@\n",
[formKeys objectAtIndex:i],
[myDictionary valueForKey:[formKeys objectAtIndex: i]]]
dataUsingEncoding:NSASCIIStringEncoding]];
}
[myReturn appendData:
[[NSString stringWithFormat:@"--%@--\n", myBounds]
dataUsingEncoding:NSASCIIStringEncoding]];
return myReturn;
}
There’s nothing particularly notable here. If you have a sufficiently good understand-
ing of the 
HTML
protocol, you can easily dump the dictionary elements into an 
NSData
object. The middle 
appendData:
method is the most important one, because it 
adds both the key (saved in an 
NSArray
) and the value (available in the original 
NSDictionary
) to the 
HTML
body.
Back outside the method, you can add the data to your 
NSMutableURLRequest
just 
as in listing 20.7, except the content type will look a little different:
NSMutableURLRequest *myRequest = [NSMutableURLRequest
requestWithURL:myURL];
NSString *myContent = [NSString stringWithFormat:@"multipart/form-data;
boundary=%@",myBounds]
[myRequest setValue:myContent forHTTPHeaderField:@"Content-type"];
[myRequest setHTTPMethod:@"POST"];
[myRequest setHTTPBody:myReturn];
Some other types of data processing, such as file uploads, will require somewhat dif-
ferent setups, and you’d do well to look at 
HTML
documentation for the specifics, but 
the general methods used to 
POST
data will remain the same.
With 
POST
ing out of the way, we’ve now covered all of the 
SDK
’s most important 
functions related to the internet. But there’s one other topic that we want to touch 
upon before we close this chapter—a variety of internet protocols that you can access 
through third-party libraries. 
20.7 Accessing the social web
Since the advent of web 2.0, a new sort of internet presence has appeared. We call it 
the social web. This is an interconnected network of web servers that exchange infor-
mation based on various well-known protocols. If you’re building internet-driven pro-
grams, you may wish to connect up to this web so that your iPhone users can become a 
part of it.
Licensed to Nick Wood <nwood888@yahoo.com>
C# Image Convert: How to Convert Adobe PDF to Jpeg, Png, Bmp, &
C# sample code for PDF to jpg image conversion. This demo code convert PDF file all pages to jpg images. C# sample code for PDF to jpg image conversion.
reader convert pdf to jpg; convert pdf to jpg converter
C# Image Convert: How to Convert Dicom Image File to Raster Images
RasterEdge.XDoc.PDF.dll. Conversion from Dicom to Jpeg Image. String inputFilePath = @"C:\input.dcm"; String outputFilePath = @"C:\output.jpg"; // Convert dicom
convert pdf into jpg; convert pdf to jpg
419
Accessing the social web
20.7.1 Using web protocols
In order to participate in the social web, clients need to speak a number of protocols, 
most of them built on top of 
HTML
. These include Ajax, 
JSON
RSS
SOAP
, and 
XML
Here’s how to use each of them from your iPhone:
Ajax
iPhone. It’s usually used as part of a client-server setup, with 
HTML
on the front 
side, but the iPhone uses an entirely different paradigm. You can dynamically 
load material into labels or text views, and you can dynamically call up websites 
using the 
XML
or 
HTML
classes we’ve discussed. There’s no need for Ajax-type 
content as long as you have good control over what a server will output. You just 
need to remember some of the lessons that Ajax teaches, such as downloading 
small bits of information, rather than a whole page.
JSON
JSON
is perhaps the most troublesome protocol to integrate. It’s quite 
important as a part of the social web, because it’s one of the standardized ways 
to download information from a web site. It also depends on your iPhone being 
able to understand JavaScript—which it doesn’t (unless you do some fancy work 
with 
DOM
and the WebKit, which are beyond the scope of this section). Fortu-
nately, there are already two 
JSON
toolkits available: 
JSON
Framework and 
Touch
JSON
. We’ll look at an example of the latter shortly.
RSS—At the time of this writing, we’re not aware of any 
RSS
libraries for the 
iPhone. But as we’ve already demonstrated in this chapter, it’s quite easy to 
parse 
RSS
using an 
XML
parser.
SOAP
SOAP
isn’t as popular as most of the other protocols listed here, but if 
you must use it, you’ll want a library. There are a number of 
SOAP
libraries writ-
ten for Objective-C (though not necessarily for the iPhone), including 
SOAP
Client and Toxic
SOAP
XML
XML
is, as we’ve already seen, fully supported by the iPhone 
OS
, but if 
you don’t like how the default parser works and want an alternative, you should 
look at Touch
XML
.
These libraries should all be easy to find with simple searches on the internet, but 
table 20.10 lists their current locations as of this writing.
Library
Location
JSON Framework
http://code.google.com/p/json-framework/
TouchJSON
http://code.google.com/p/touchcode/
Soap Client
http://code.google.com/p/mac-soapclient/
ToxicSOAP
http://code.google.com/p/toxic-public/
TouchXML
http://code.google.com/p/touchcode/
Table 20.10 Download sites 
for social protocol libraries
Licensed to Nick Wood <nwood888@yahoo.com>
JPEG to PDF Converter | Convert JPEG to PDF, Convert PDF to JPEG
similar software; Support a batch conversion of JPG to PDF with amazingly high speed; Get a compressed PDF file after conversion; Support
changing file from pdf to jpg; best pdf to jpg converter
JPG to DICOM Converter | Convert JPEG to DICOM, Convert DICOM to
Open JPEG to DICOM Converter first; Load JPG images from local folders in "File" in toolbar Windows Explorer; Select "Batch Conversion" & Choose "DICOM" in
convert pdf to jpg for online; convert pdf pages to jpg online
420
C
HAPTER
20 
The web: web views and internet protocols
Because of its importance to the social web, we’re going to pay some additional atten-
tion to 
JSON
, using the Touch
JSON
library.
20.7.2 Using TouchJSON
For our final example, we’re going to return to Core 
Location one more time, because GeoNames offers a lot 
of 
JSON
information. You’re going to use GeoNames to 
display the postal codes near a user’s current location. 
Figure 20.5 shows our intended result by highlighting 
the postal codes near Apple headquarters, the location 
reported by the iPhone Simulator.
In order to get to this point, you must first install 
this third-party library and make use of it.
INSTALLING TOUCHJSON
To integrate Touch
JSON
into your project, you must 
download the package from Google and move the 
source code into your project. The easiest way to do 
this is to open the Touch
JSON
download inside Xcode 
and copy the Source folder to your own project. Tell 
Xcode to copy all the files into your project as well. 
Afterward, you’ll probably want to rename the copied 
folder from Source to Touch
JSON
.
Then you need to include the header 
CJSOND
eseri-
alizer.h wherever you want to use Touch
JSON.
USING TOUCHJSON
In order to use Touch
JSON
, you pass the 
CJSONDeserializer
class an 
NSData
object 
containing the 
JSON
code. Listing 20.9 shows how to do so. In this example, this work 
occurs inside a location manager delegate. It’s part of a program similar to our earlier 
GeoNames example, but this time we’re looking up postal codes with a 
JSON
return 
rather than altitudes with an 
XML
return.
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
[myLM stopUpdatingLocation];
[myActivity stopAnimating];
NSString *gnLookup = [NSString
stringWithString:@"http://ws.geonames.org/findNearbyPostalCodesJSON
?lat=37.331689&lng=-122.030731"];
NSData *gnData = [NSData dataWithContentsOfURL:
[NSURL URLWithString:gnLookup]];  
NSError *error = nil;
Listing 20.9 Using TouchJSON
B
Figure 10.5 It’s easy to 
extract data using TouchJSON.
Licensed to Nick Wood <nwood888@yahoo.com>
JPG to GIF Converter | Convert JPEG to GIF, Convert GIF to JPG
Open JPEG to GIF Converter first; Load JPG images from local folders in "File" in toolbar Windows Explorer; Select "Batch Conversion" & Choose "GIF" in "Output
batch convert pdf to jpg; convert pdf image to jpg
JPG to PNG Converter | Convert JPEG to PNG, Convert PNG to JPG
Open JPEG to PNG Converter first; Load JPG images from local folders in "File" in toolbar Windows Explorer; Select "Batch Conversion" & Choose "PNG" in "Output
convert pdf to jpeg; convert multiple pdf to jpg online
421
Summary
NSDictionary *dictionary = [[CJSONDeserializer deserializer]
deserializeAsDictionary:gnData error:&error];  
if(error) {
postalLabel.text = [NSString stringWithFormat:@"Error: %@",
[[error userInfo] objectForKey:@"NSLocalizedDescription"]];
} else {
NSMutableString *postCodes = [NSMutableString
stringWithString:@"Nearby post codes are:\n\n"];
for (int i = 0 ;
i < [[dictionary objectForKey:@"postalCodes"] count] ;
i++) {
[postCodes appendFormat:@"%@ (%@)\n",
[[[dictionary objectForKey:@"postalCodes"] objectAtIndex:i]
objectForKey:@"postalCode"],
[[[dictionary objectForKey:@"postalCodes"] objectAtIndex:i]
objectForKey:@"placeName"]];
}
postalLabel.text = postCodes;
}
}
To access the 
JSON
results, you first retrieve the data from a 
URL
using the 
datawith-
ContentsOfURL:
method 
B
, which was one of the ways we suggested for retrieving 
raw data earlier in the chapter. Then you plug that 
NSData
object into the 
CJSONDese-
rializer
C
to generate an 
NSDictionary
containing the 
JSON
output.
The Touch
JSON
classes are much easier to use than the 
XML
parser we met earlier 
in this chapter. All you need to do is read through the arrays and dictionaries that are 
output. The downside is that the resulting dictionary may take up a lot of memory 
(which is why the 
XML
parser didn’t do things this way), so be aware of that if you’re 
retrieving particularly large 
JSON
results.
Absent that concern, you should be on your way to using 
JSON
and creating yet 
another link between your users’ iPhones and the whole world wide web. 
20.8 Summary
“There’s more than one way to do it.”
That was the slogan of Perl, one of the first languages used to create dynamic web 
pages, and today you could equally use that slogan to describe the iPhone, one of the 
newest cutting-edge internet devices.
We opened this book by talking about the two different ways that you could write 
iPhone programs: using web technologies and using the 
SDK
. That also highlighted 
two different ways that you could interact with the internet: either as an equal partici-
pant—a web-based member of the internet’s various peer-to-peer and client-server 
protocols—or as a pure iPhone client that runs its own programs and connects to the 
internet via its own means.
We’ve said before that each programming method has its own advantages, and we 
continue to think that web development is often a better choice when you’re interacting 
C
Licensed to Nick Wood <nwood888@yahoo.com>
422
C
HAPTER
20 
The web: web views and internet protocols
with the internet already, but when you need to use other 
SDK
features, the 
SDK
offers 
some great ways to connect to the web.
As we’ve seen in this chapter, you have easy and intuitive access to the social 
web—that conglomeration of machines that’s connected via various public protocols. 
You should have no trouble creating projects that use the 
HTML
and 
XML
protocols, 
and even further flung protocols like 
JSON
and 
SOAP
are usable thanks to third-party 
libraries. That’ll cover most programmers’ needs, but for those of you who need to dig 
deeper, the 
SDK
has you covered there too, thanks to Core Foundation classes.
In coming full circle, returning to the web technologies that opened this book, 
we’re also bringing this book to its end. But read on (if you haven’t already) for some 
helpful appendixes that list numerous 
SDK
objects, talk more about getting your proj-
ects ready for market, and point toward other resources.
Licensed to Nick Wood <nwood888@yahoo.com>
423
appendix A:
iPhone OS class reference
After this book, your main resource for learning more about the iPhone should be the 
references at developer.apple.com. To help you find documents that might interest 
you, this appendix lists the major classes in the 
UIK
it and Foundation hierarchies that 
you might want to know more about, excluding classes that only appear as a part of 
another class.
A.1
UIKit framework classes
The 
UIK
it framework contains those classes most tightly connected to the iPhone, 
including all of the graphical classes you use to make up pages. A partial listing 
appears as table A.1. It’s current as of iPhone 
OS
2.1, and will probably be mostly cor-
rect when you read this, but the 
UIK
it does sometimes change between releases.
Table A.1 A listing of the most important User Interface classes 
Class
Parent
Summary
UIActionSheet
UIView
A pop-up window that includes 
options; similar to a 
UIAlertView
UIActivityIndicatorView UIView
An indeterminate progress display
UIAlertView
UIView
A pop-up window that includes 
options; similar to a 
UIActionSheet
UIApplication
UIResponder
The main source for application 
information and control
UIButton
UIControl
A push button
UIColor
NSObject
A color output class
Licensed to Nick Wood <nwood888@yahoo.com>
424
A
PPENDIX
iPhone OS class reference
UIControl
UIView
An abstract class that is parent to 
many user controls
UIDatePicker
UIControl
A wheeled date-selection device
UIDevice
NSObject
A class that holds info about the 
iPhone itself
UIEvent
NSObject
A container for touches; part of 
the event model
UIFont
NSObject
A font output class
UIImage
NSObject
A non-displaying image holder
UIImagePickerController UINavigationController A modal controller for image 
selection
UIImageView
UIView
An image display that holds one 
or more UIImage objects
UILabel
UIView
A small, non-editable text display
UINavigationController
UIViewController
A hierarchical controller; often 
linked with a UITableView-
Controller to produce  
hierarchical menus
UIPageControl
UIControl
A toolbar for navigating among 
pages using dots
UIPickerView
UIView
A wheel-based selection mecha-
nism
UIProgressView
UIView
A determinate progress display
UIResponder
NSObject
An abstract class that defines all 
classes that can receive and 
respond to events
UIScreen
NSObject
A class containing an iPhone’s 
entire screen
UIScrollView
UIView
A parent class for views with mul-
tiple pages of content
UISearchBar
UIView
A text-input mechanism special-
ized for searches
UISegmentedControl
UIControl
A control for making one of sev-
eral choices
UISlider
UIControl
A control for setting discrete  
values
Table A.1 A listing of the most important User Interface classes (continued)
Class
Parent
Summary
Licensed to Nick Wood <nwood888@yahoo.com>
425
Foundation framework classes
A.2
Foundation framework classes
Foundation framework classes, whose names begin with 
NS
, are almost as important as 
the 
UI
classes because they represent foundational variable types, like strings and 
numbers. Table A.2 only lists the major classes that have some relevance to the sort of 
work you’ve done in this book; for more, look at Apple’s developer site under “Core 
Services” frameworks.
UISwitch
UIControl
A control for selecting binary  
values
UITabBarController
UIViewController
A controller for moving among 
multiple screens
UITableViewController
UIViewController
A controller for displaying tables 
of content; often linked with a 
UINavigationController
UITextField
UIControl
A control for inputting short text
UITextView
UIScrollView
A display for text of any size
UITouch
NSObject
An individual touch on the 
iPhone’s screen
UIView
UIResponder
The abstract class that lies at the 
core of most UIKit objects
UIViewController
UIResponder
A simple view controller
UIWebView
UIView
A Safari-like web browser
UIWindow
UIView
The root for the view hierarchy
Table A.2 A listing of the most important Foundation classes 
Class
Parent
Summary
NSArray
NSObject
An array
NSAutoreleasePool
NSObject
A memory-management class
NSBundle
NSObject
A pointer toward a project’s file system home
NSCharacterSet
NSObject
Methods for managing characters
NSCountedSet
NSMutableSet
An unordered collection of elements
NSData
NSObject
A wrapper for a byte buffer
NSDictionary
NSObject
An associative array
NSError
NSObject
Encapsulated error information
Table A.1 A listing of the most important User Interface classes (continued)
Class
Parent
Summary
Licensed to Nick Wood <nwood888@yahoo.com>
Documents you may be interested
Documents you may be interested