Ben Copsey

Refactor: move multipart form stuff into subclass

Added iphone example
  1 +//
  2 +// ASIFormDataRequest.h
  3 +// asi-http-request
  4 +//
  5 +// Created by Ben Copsey on 07/11/2008.
  6 +// Copyright 2008 All-Seeing Interactive. All rights reserved.
  7 +//
  8 +
  9 +#import "ASIHTTPRequest.h"
  10 +
  11 +@interface ASIFormDataRequest : ASIHTTPRequest {
  12 +
  13 + //Parameters that will be POSTed to the url
  14 + NSMutableDictionary *postData;
  15 +
  16 + //Files that will be POSTed to the url
  17 + NSMutableDictionary *fileData;
  18 +
  19 +}
  20 +
  21 +#pragma mark setup request
  22 +
  23 +//Add a POST variable to the request
  24 +- (void)setPostValue:(id)value forKey:(NSString *)key;
  25 +
  26 +//Add the contents of a local file as a POST variable to the request
  27 +- (void)setFile:(NSString *)filePath forKey:(NSString *)key;
  28 +
  29 +@end
  1 +//
  2 +// ASIFormDataRequest.m
  3 +// asi-http-request
  4 +//
  5 +// Created by Ben Copsey on 07/11/2008.
  6 +// Copyright 2008 All-Seeing Interactive. All rights reserved.
  7 +//
  8 +
  9 +#import "ASIFormDataRequest.h"
  10 +
  11 +
  12 +@implementation ASIFormDataRequest
  13 +
  14 +#pragma mark init / dealloc
  15 +
  16 +- (id)initWithURL:(NSURL *)newURL
  17 +{
  18 + self = [super initWithURL:newURL];
  19 + postData = nil;
  20 + fileData = nil;
  21 + return self;
  22 +}
  23 +
  24 +- (void)dealloc
  25 +{
  26 + [postData release];
  27 + [fileData release];
  28 + [super dealloc];
  29 +}
  30 +
  31 +#pragma mark setup request
  32 +
  33 +- (void)setPostValue:(id)value forKey:(NSString *)key
  34 +{
  35 + if (!postData) {
  36 + postData = [[NSMutableDictionary alloc] init];
  37 + }
  38 + [postData setValue:value forKey:key];
  39 +}
  40 +
  41 +- (void)setFile:(NSString *)filePath forKey:(NSString *)key
  42 +{
  43 + if (!fileData) {
  44 + fileData = [[NSMutableDictionary alloc] init];
  45 + }
  46 + [fileData setValue:filePath forKey:key];
  47 +}
  48 +
  49 +
  50 +#pragma mark request logic
  51 +
  52 +// Create the request
  53 +- (void)main
  54 +{
  55 +
  56 + // If the user didn't specify post data, we will let ASIHTTPRequest use the value of postBody
  57 + if ([postData count] == 0 && [fileData count] == 0) {
  58 + [super main];
  59 + return;
  60 + }
  61 +
  62 + //Set your own boundary string only if really obsessive. We don't bother to check if post data contains the boundary, since it's pretty unlikely that it does.
  63 + NSString *stringBoundary = @"0xKhTmLbOuNdArY";
  64 +
  65 + if ([fileData count] > 0) {
  66 + //We need to use multipart/form-data when using file upload
  67 + [self addRequestHeader:@"Content-Type" value:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",stringBoundary]];
  68 + }
  69 +
  70 + //Since we've got post data, let's set the post body to an empty NSMutableData object
  71 + [self setPostBody:[NSMutableData data]];
  72 +
  73 + [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
  74 +
  75 + //Adds post data
  76 + NSData *endItemBoundary = [[NSString stringWithFormat:@"\r\n--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding];
  77 + NSEnumerator *e = [postData keyEnumerator];
  78 + NSString *key;
  79 + int i=0;
  80 + while (key = [e nextObject]) {
  81 + [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key] dataUsingEncoding:NSUTF8StringEncoding]];
  82 + [postBody appendData:[[postData objectForKey:key] dataUsingEncoding:NSUTF8StringEncoding]];
  83 + i++;
  84 + if (i != [postData count] || [fileData count] > 0) { //Only add the boundary if this is not the last item in the post body
  85 + [postBody appendData:endItemBoundary];
  86 + }
  87 + }
  88 +
  89 + //Adds files to upload
  90 + NSData *contentTypeHeader = [[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding];
  91 + e = [fileData keyEnumerator];
  92 + i=0;
  93 + while (key = [e nextObject]) {
  94 + NSString *filePath = [fileData objectForKey:key];
  95 + [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n",key,[filePath lastPathComponent]] dataUsingEncoding:NSUTF8StringEncoding]];
  96 + [postBody appendData:contentTypeHeader];
  97 + [postBody appendData:[NSData dataWithContentsOfMappedFile:filePath]];
  98 + i++;
  99 + if (i != [fileData count]) { //Only add the boundary if this is not the last item in the post body
  100 + [postBody appendData:endItemBoundary];
  101 + }
  102 + }
  103 +
  104 + [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
  105 +
  106 + //Now we've created our post data, construct the request
  107 + [super main];
  108 +
  109 +}
  110 +
  111 +
  112 +
  113 +@end
@@ -10,11 +10,9 @@ @@ -10,11 +10,9 @@
10 // Portions are based on the ImageClient example from Apple: 10 // Portions are based on the ImageClient example from Apple:
11 // See: http://developer.apple.com/samplecode/ImageClient/listing37.html 11 // See: http://developer.apple.com/samplecode/ImageClient/listing37.html
12 12
13 -#import <Cocoa/Cocoa.h>  
14 #import "ASIProgressDelegate.h" 13 #import "ASIProgressDelegate.h"
15 14
16 15
17 -  
18 @interface ASIHTTPRequest : NSOperation { 16 @interface ASIHTTPRequest : NSOperation {
19 17
20 //The url for this operation, should include GET params in the query string where appropriate 18 //The url for this operation, should include GET params in the query string where appropriate
@@ -23,11 +21,11 @@ @@ -23,11 +21,11 @@
23 //The delegate, you need to manage setting and talking to your delegate in your subclasses 21 //The delegate, you need to manage setting and talking to your delegate in your subclasses
24 id delegate; 22 id delegate;
25 23
26 - //Parameters that will be POSTed to the url 24 + //HTTP method to use (GET / POST / PUT / DELETE). Defaults to GET
27 - NSMutableDictionary *postData; 25 + NSString *requestMethod;
28 26
29 - //Files that will be POSTed to the url 27 + //Request body
30 - NSMutableDictionary *fileData; 28 + NSMutableData *postBody;
31 29
32 //Dictionary for custom HTTP request headers 30 //Dictionary for custom HTTP request headers
33 NSMutableDictionary *requestHeaders; 31 NSMutableDictionary *requestHeaders;
@@ -138,11 +136,6 @@ @@ -138,11 +136,6 @@
138 //Add a custom header to the request 136 //Add a custom header to the request
139 - (void)addRequestHeader:(NSString *)header value:(NSString *)value; 137 - (void)addRequestHeader:(NSString *)header value:(NSString *)value;
140 138
141 -//Add a POST variable to the request  
142 -- (void)setPostValue:(id)value forKey:(NSString *)key;  
143 -  
144 -//Add the contents of a local file as a POST variable to the request  
145 -- (void)setFile:(NSString *)filePath forKey:(NSString *)key;  
146 139
147 #pragma mark get information about this request 140 #pragma mark get information about this request
148 141
@@ -259,4 +252,6 @@ @@ -259,4 +252,6 @@
259 @property (retain) NSMutableData *receivedData; 252 @property (retain) NSMutableData *receivedData;
260 @property (retain) NSDate *lastActivityTime; 253 @property (retain) NSDate *lastActivityTime;
261 @property (assign) NSTimeInterval timeOutSeconds; 254 @property (assign) NSTimeInterval timeOutSeconds;
  255 +@property (retain) NSString *requestMethod;
  256 +@property (retain) NSMutableData *postBody;
262 @end 257 @end
@@ -38,10 +38,9 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -38,10 +38,9 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
38 38
39 - (id)initWithURL:(NSURL *)newURL 39 - (id)initWithURL:(NSURL *)newURL
40 { 40 {
41 - [super init]; 41 + self = [super init];
  42 + [self setRequestMethod:@"GET"];
42 lastBytesSent = 0; 43 lastBytesSent = 0;
43 - postData = nil;  
44 - fileData = nil;  
45 username = nil; 44 username = nil;
46 password = nil; 45 password = nil;
47 requestHeaders = nil; 46 requestHeaders = nil;
@@ -72,19 +71,24 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -72,19 +71,24 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
72 CFRelease(request); 71 CFRelease(request);
73 } 72 }
74 [self cancelLoad]; 73 [self cancelLoad];
  74 + [postBody release];
75 [requestCredentials release]; 75 [requestCredentials release];
76 [error release]; 76 [error release];
77 - [postData release];  
78 - [fileData release];  
79 [requestHeaders release]; 77 [requestHeaders release];
  78 + [requestCookies release];
80 [downloadDestinationPath release]; 79 [downloadDestinationPath release];
81 [outputStream release]; 80 [outputStream release];
82 [username release]; 81 [username release];
83 [password release]; 82 [password release];
  83 + [domain release];
84 [authenticationRealm release]; 84 [authenticationRealm release];
85 [url release]; 85 [url release];
86 [authenticationLock release]; 86 [authenticationLock release];
87 [lastActivityTime release]; 87 [lastActivityTime release];
  88 + [responseCookies release];
  89 + [receivedData release];
  90 + [responseHeaders release];
  91 + [requestMethod release];
88 [super dealloc]; 92 [super dealloc];
89 } 93 }
90 94
@@ -100,23 +104,6 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -100,23 +104,6 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
100 } 104 }
101 105
102 106
103 -- (void)setPostValue:(id)value forKey:(NSString *)key  
104 -{  
105 - if (!postData) {  
106 - postData = [[NSMutableDictionary alloc] init];  
107 - }  
108 - [postData setValue:value forKey:key];  
109 -}  
110 -  
111 -- (void)setFile:(NSString *)filePath forKey:(NSString *)key  
112 -{  
113 - if (!fileData) {  
114 - fileData = [[NSMutableDictionary alloc] init];  
115 - }  
116 - [fileData setValue:filePath forKey:key];  
117 -}  
118 -  
119 -  
120 #pragma mark get information about this request 107 #pragma mark get information about this request
121 108
122 - (BOOL)isFinished 109 - (BOOL)isFinished
@@ -145,15 +132,9 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -145,15 +132,9 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
145 - (void)main 132 - (void)main
146 { 133 {
147 complete = NO; 134 complete = NO;
148 -  
149 - // We'll make a post request only if the user specified post data  
150 - NSString *method = @"GET";  
151 - if ([postData count] > 0 || [fileData count] > 0) {  
152 - method = @"POST";  
153 - }  
154 135
155 // Create a new HTTP request. 136 // Create a new HTTP request.
156 - request = CFHTTPMessageCreateRequest(kCFAllocatorDefault, (CFStringRef)method, (CFURLRef)url, kCFHTTPVersion1_1); 137 + request = CFHTTPMessageCreateRequest(kCFAllocatorDefault, (CFStringRef)requestMethod, (CFURLRef)url, kCFHTTPVersion1_1);
157 if (!request) { 138 if (!request) {
158 [self failWithProblem:[NSString stringWithFormat:@"Unable to create request for: %@",url]]; 139 [self failWithProblem:[NSString stringWithFormat:@"Unable to create request for: %@",url]];
159 return; 140 return;
@@ -166,9 +147,6 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -166,9 +147,6 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
166 [ASIHTTPRequest setSessionCredentials:nil]; 147 [ASIHTTPRequest setSessionCredentials:nil];
167 } 148 }
168 } 149 }
169 -  
170 - //Set your own boundary string only if really obsessive. We don't bother to check if post data contains the boundary, since it's pretty unlikely that it does.  
171 - NSString *stringBoundary = @"0xKhTmLbOuNdArY";  
172 150
173 //Add cookies from the persistant (mac os global) store 151 //Add cookies from the persistant (mac os global) store
174 if (useCookiePersistance) { 152 if (useCookiePersistance) {
@@ -200,48 +178,11 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -200,48 +178,11 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
200 for (header in requestHeaders) { 178 for (header in requestHeaders) {
201 CFHTTPMessageSetHeaderFieldValue(request, (CFStringRef)header, (CFStringRef)[requestHeaders objectForKey:header]); 179 CFHTTPMessageSetHeaderFieldValue(request, (CFStringRef)header, (CFStringRef)[requestHeaders objectForKey:header]);
202 } 180 }
203 - CFHTTPMessageSetHeaderFieldValue(request, (CFStringRef)@"Content-Type", (CFStringRef)[NSString stringWithFormat:@"multipart/form-data; boundary=%@",stringBoundary]);  
204 -  
205 181
206 - if ([postData count] > 0 || [fileData count] > 0) { 182 +
207 - 183 + //If this is a post request and we have data to send, add it to the request
208 - NSMutableData *postBody = [NSMutableData data]; 184 + if ([self postBody]) {
209 - [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];  
210 -  
211 - //Adds post data  
212 - NSData *endItemBoundary = [[NSString stringWithFormat:@"\r\n--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding];  
213 - NSEnumerator *e = [postData keyEnumerator];  
214 - NSString *key;  
215 - int i=0;  
216 - while (key = [e nextObject]) {  
217 - [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key] dataUsingEncoding:NSUTF8StringEncoding]];  
218 - [postBody appendData:[[postData objectForKey:key] dataUsingEncoding:NSUTF8StringEncoding]];  
219 - i++;  
220 - if (i != [postData count] || [fileData count] > 0) { //Only add the boundary if this is not the last item in the post body  
221 - [postBody appendData:endItemBoundary];  
222 - }  
223 - }  
224 -  
225 - //Adds files to upload  
226 - NSData *contentTypeHeader = [[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding];  
227 - e = [fileData keyEnumerator];  
228 - i=0;  
229 - while (key = [e nextObject]) {  
230 - NSString *filePath = [fileData objectForKey:key];  
231 - [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n",key,[filePath lastPathComponent]] dataUsingEncoding:NSUTF8StringEncoding]];  
232 - [postBody appendData:contentTypeHeader];  
233 - [postBody appendData:[NSData dataWithContentsOfMappedFile:filePath]];  
234 - i++;  
235 - if (i != [fileData count]) { //Only add the boundary if this is not the last item in the post body  
236 - [postBody appendData:endItemBoundary];  
237 - }  
238 - }  
239 -  
240 - [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];  
241 -  
242 - // Set the body.  
243 CFHTTPMessageSetBody(request, (CFDataRef)postBody); 185 CFHTTPMessageSetBody(request, (CFDataRef)postBody);
244 -  
245 postLength = [postBody length]; 186 postLength = [postBody length];
246 } 187 }
247 188
@@ -887,4 +828,6 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -887,4 +828,6 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
887 @synthesize receivedData; 828 @synthesize receivedData;
888 @synthesize lastActivityTime; 829 @synthesize lastActivityTime;
889 @synthesize timeOutSeconds; 830 @synthesize timeOutSeconds;
  831 +@synthesize requestMethod;
  832 +@synthesize postBody;
890 @end 833 @end
@@ -5,7 +5,6 @@ @@ -5,7 +5,6 @@
5 // Copyright 2008 All-Seeing Interactive. All rights reserved 5 // Copyright 2008 All-Seeing Interactive. All rights reserved
6 // 6 //
7 7
8 -#import <Cocoa/Cocoa.h>  
9 8
10 @protocol ASIProgressDelegate 9 @protocol ASIProgressDelegate
11 10
@@ -5,7 +5,6 @@ @@ -5,7 +5,6 @@
5 // Copyright 2008 All-Seeing Interactive Ltd. All rights reserved. 5 // Copyright 2008 All-Seeing Interactive Ltd. All rights reserved.
6 // 6 //
7 7
8 -#import <Cocoa/Cocoa.h>  
9 @class ASIHTTPRequest; 8 @class ASIHTTPRequest;
10 9
11 @interface AppDelegate : NSObject { 10 @interface AppDelegate : NSObject {
@@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
7 7
8 #import "AppDelegate.h" 8 #import "AppDelegate.h"
9 #import "ASIHTTPRequest.h" 9 #import "ASIHTTPRequest.h"
  10 +#import "ASIFormDataRequest.h"
10 11
11 @implementation AppDelegate 12 @implementation AppDelegate
12 13
@@ -26,7 +27,7 @@ @@ -26,7 +27,7 @@
26 27
27 - (IBAction)simpleURLFetch:(id)sender 28 - (IBAction)simpleURLFetch:(id)sender
28 { 29 {
29 - ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://asi/"]] autorelease]; 30 + ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/"]] autorelease];
30 31
31 //Customise our user agent, for no real reason 32 //Customise our user agent, for no real reason
32 [request addRequestHeader:@"User-Agent" value:@"ASIHTTPRequest"]; 33 [request addRequestHeader:@"User-Agent" value:@"ASIHTTPRequest"];
@@ -165,7 +166,7 @@ @@ -165,7 +166,7 @@
165 166
166 [networkQueue cancelAllOperations]; 167 [networkQueue cancelAllOperations];
167 [progressIndicator setDoubleValue:0]; 168 [progressIndicator setDoubleValue:0];
168 - ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/ignore"]] autorelease]; 169 + ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/ignore"]] autorelease];
169 [request setDelegate:self]; 170 [request setDelegate:self];
170 [request setUploadProgressDelegate:progressIndicator]; 171 [request setUploadProgressDelegate:progressIndicator];
171 [request setPostValue:@"test" forKey:@"value1"]; 172 [request setPostValue:@"test" forKey:@"value1"];
  1 +//
  2 +// FirstViewController.h
  3 +// tabtest
  4 +//
  5 +// Created by Ben Copsey on 07/11/2008.
  6 +// Copyright All-Seeing Interactive 2008. All rights reserved.
  7 +//
  8 +
  9 +#import <UIKit/UIKit.h>
  10 +
  11 +
  12 +@interface FirstViewController : UIViewController {
  13 +
  14 +}
  15 +
  16 +@end
  1 +//
  2 +// FirstViewController.m
  3 +// tabtest
  4 +//
  5 +// Created by Ben Copsey on 07/11/2008.
  6 +// Copyright All-Seeing Interactive 2008. All rights reserved.
  7 +//
  8 +
  9 +#import "FirstViewController.h"
  10 +
  11 +
  12 +@implementation FirstViewController
  13 +
  14 +
  15 +/*
  16 +// Override initWithNibName:bundle: to load the view using a nib file then perform additional customization that is not appropriate for viewDidLoad.
  17 +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
  18 + if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
  19 + // Custom initialization
  20 + }
  21 + return self;
  22 +}
  23 +*/
  24 +
  25 +/*
  26 +// Implement loadView to create a view hierarchy programmatically.
  27 +- (void)loadView {
  28 +}
  29 +*/
  30 +
  31 +/*
  32 +// Implement viewDidLoad to do additional setup after loading the view.
  33 +- (void)viewDidLoad {
  34 + [super viewDidLoad];
  35 +}
  36 +*/
  37 +
  38 +
  39 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
  40 + // Return YES for supported orientations
  41 + return (interfaceOrientation == UIInterfaceOrientationPortrait);
  42 +}
  43 +
  44 +
  45 +- (void)didReceiveMemoryWarning {
  46 + [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
  47 + // Release anything that's not essential, such as cached data
  48 +}
  49 +
  50 +
  51 +- (void)dealloc {
  52 + [super dealloc];
  53 +}
  54 +
  55 +@end
1 // 1 //
2 -// main.m 2 +// Mac-Os-Sample-main.m
3 // asi-http-request 3 // asi-http-request
4 // 4 //
5 // Created by Ben Copsey on 09/07/2008. 5 // Created by Ben Copsey on 09/07/2008.
@@ -6,7 +6,6 @@ @@ -6,7 +6,6 @@
6 // Copyright 2008 All-Seeing Interactive. All rights reserved. 6 // Copyright 2008 All-Seeing Interactive. All rights reserved.
7 // 7 //
8 8
9 -#import <Cocoa/Cocoa.h>  
10 9
11 @interface NSHTTPCookie (ValueEncodingAdditions) 10 @interface NSHTTPCookie (ValueEncodingAdditions)
12 11
  1 +//
  2 +// QueueViewController.h
  3 +// asi-http-request
  4 +//
  5 +// Created by Ben Copsey on 07/11/2008.
  6 +// Copyright 2008 All-Seeing Interactive. All rights reserved.
  7 +//
  8 +
  9 +#import <UIKit/UIKit.h>
  10 +
  11 +
  12 +@interface QueueViewController : UIViewController {
  13 + NSOperationQueue *networkQueue;
  14 +
  15 + IBOutlet UIImageView *imageView1;
  16 + IBOutlet UIImageView *imageView2;
  17 + IBOutlet UIImageView *imageView3;
  18 + IBOutlet UIProgressView *progressIndicator;
  19 +
  20 +}
  21 +
  22 +- (IBAction)fetchThreeImages:(id)sender;
  23 +
  24 +@end
  1 +//
  2 +// QueueViewController.m
  3 +// asi-http-request
  4 +//
  5 +// Created by Ben Copsey on 07/11/2008.
  6 +// Copyright 2008 All-Seeing Interactive. All rights reserved.
  7 +//
  8 +
  9 +#import "QueueViewController.h"
  10 +#import "ASIHTTPRequest.h"
  11 +
  12 +@implementation QueueViewController
  13 +
  14 +
  15 +- (void)awakeFromNib
  16 +{
  17 + networkQueue = [[NSOperationQueue alloc] init];
  18 +}
  19 +
  20 +- (IBAction)fetchThreeImages:(id)sender
  21 +{
  22 + [imageView1 setImage:nil];
  23 + [imageView2 setImage:nil];
  24 + [imageView3 setImage:nil];
  25 +
  26 + [networkQueue cancelAllOperations];
  27 + [progressIndicator setProgress:0];
  28 + ASIHTTPRequest *request;
  29 + request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/i/logo.png"]] autorelease];
  30 + [request setDelegate:self];
  31 + [request setDidFinishSelector:@selector(imageFetchComplete:)];
  32 + [networkQueue addOperation:request];
  33 +
  34 + request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/i/trailsnetwork.png"]] autorelease];
  35 + [request setDelegate:self];
  36 + [request setDidFinishSelector:@selector(imageFetchComplete:)];
  37 + [networkQueue addOperation:request];
  38 +
  39 + request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/i/sharedspace20.png"]] autorelease];
  40 + [request setDelegate:self];
  41 + [request setDidFinishSelector:@selector(imageFetchComplete:)];
  42 + [networkQueue addOperation:request];
  43 +}
  44 +
  45 +
  46 +- (void)imageFetchComplete:(ASIHTTPRequest *)request
  47 +{
  48 + UIImage *img = [UIImage imageWithData:[request receivedData]];
  49 + if (img) {
  50 + if ([imageView1 image]) {
  51 + if ([imageView2 image]) {
  52 + [imageView3 setImage:img];
  53 + } else {
  54 + [imageView2 setImage:img];
  55 + }
  56 + } else {
  57 + [imageView1 setImage:img];
  58 + }
  59 + }
  60 + [progressIndicator setProgress:[progressIndicator progress]+0.3333];
  61 +
  62 +}
  63 +
  64 +- (void)dealloc {
  65 + [networkQueue release];
  66 + [super dealloc];
  67 +}
  68 +
  69 +
  70 +@end
  1 +To do:
  2 +Rest unit tests (get / post / put /delete)
  3 +
  4 +
  5 +Changes for release notes:
  6 +* Set request method (get,post,delete,put)
  7 +* Fixed a few memory leaks (thanks clang static analyser!)
  8 +* Split ASIHTTPRequest in two
  9 +
  10 +
1 [NEW!] Documentation is available at: http://allseeing-i.com/asi-http-request 11 [NEW!] Documentation is available at: http://allseeing-i.com/asi-http-request
2 12
3 ASIHTTPRequest is an easy to use wrapper around the CFNetwork API that makes some of the more tedious aspects of communicating with web servers easier. 13 ASIHTTPRequest is an easy to use wrapper around the CFNetwork API that makes some of the more tedious aspects of communicating with web servers easier.
  1 +//
  2 +// SynchronousViewController.h
  3 +// asi-http-request
  4 +//
  5 +// Created by Ben Copsey on 07/11/2008.
  6 +// Copyright 2008 All-Seeing Interactive. All rights reserved.
  7 +//
  8 +
  9 +#import <UIKit/UIKit.h>
  10 +
  11 +
  12 +@interface SynchronousViewController : UIViewController {
  13 + IBOutlet UITextView *htmlSource;
  14 +}
  15 +- (IBAction)simpleURLFetch:(id)sender;
  16 +
  17 +@end
  1 +//
  2 +// SynchronousViewController.m
  3 +// asi-http-request
  4 +//
  5 +// Created by Ben Copsey on 07/11/2008.
  6 +// Copyright 2008 All-Seeing Interactive. All rights reserved.
  7 +//
  8 +
  9 +#import "SynchronousViewController.h"
  10 +#import "ASIHTTPRequest.h"
  11 +
  12 +@implementation SynchronousViewController
  13 +
  14 +- (IBAction)simpleURLFetch:(id)sender
  15 +{
  16 + ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/"]] autorelease];
  17 +
  18 + //Customise our user agent, for no real reason
  19 + [request addRequestHeader:@"User-Agent" value:@"ASIHTTPRequest"];
  20 +
  21 + [request start];
  22 + if ([request dataString]) {
  23 + [htmlSource setText:[request dataString]];
  24 + }
  25 +}
  26 +
  27 +
  28 +@end
@@ -267,9 +267,10 @@ @@ -267,9 +267,10 @@
267 <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key> 267 <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
268 <array> 268 <array>
269 <string>29B97314FDCFA39411CA2CEA</string> 269 <string>29B97314FDCFA39411CA2CEA</string>
  270 + <string>B5CFFBCA0EC46DF0009ADE56</string>
  271 + <string>B5CFFBC70EC46DDE009ADE56</string>
270 <string>B5731AF70E430B020008024F</string> 272 <string>B5731AF70E430B020008024F</string>
271 <string>080E96DDFE201D6D7F000001</string> 273 <string>080E96DDFE201D6D7F000001</string>
272 - <string>29B97315FDCFA39411CA2CEA</string>  
273 <string>29B97317FDCFA39411CA2CEA</string> 274 <string>29B97317FDCFA39411CA2CEA</string>
274 <string>29B97323FDCFA39411CA2CEA</string> 275 <string>29B97323FDCFA39411CA2CEA</string>
275 <string>1058C7A0FEA54F0111CA2CBB</string> 276 <string>1058C7A0FEA54F0111CA2CBB</string>
@@ -279,8 +280,8 @@ @@ -279,8 +280,8 @@
279 <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key> 280 <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
280 <array> 281 <array>
281 <array> 282 <array>
282 - <integer>11</integer> 283 + <integer>21</integer>
283 - <integer>5</integer> 284 + <integer>19</integer>
284 <integer>0</integer> 285 <integer>0</integer>
285 </array> 286 </array>
286 </array> 287 </array>
@@ -304,7 +305,7 @@ @@ -304,7 +305,7 @@
304 <real>312</real> 305 <real>312</real>
305 </array> 306 </array>
306 <key>RubberWindowFrame</key> 307 <key>RubberWindowFrame</key>
307 - <string>227 156 1432 976 0 0 1920 1178 </string> 308 + <string>238 198 1432 976 0 0 1920 1178 </string>
308 </dict> 309 </dict>
309 <key>Module</key> 310 <key>Module</key>
310 <string>PBXSmartGroupTreeModule</string> 311 <string>PBXSmartGroupTreeModule</string>
@@ -322,7 +323,7 @@ @@ -322,7 +323,7 @@
322 <key>PBXProjectModuleGUID</key> 323 <key>PBXProjectModuleGUID</key>
323 <string>1CE0B20306471E060097A5F4</string> 324 <string>1CE0B20306471E060097A5F4</string>
324 <key>PBXProjectModuleLabel</key> 325 <key>PBXProjectModuleLabel</key>
325 - <string>ASIHTTPRequest.m</string> 326 + <string>NSHTTPCookieAdditions.m</string>
326 <key>PBXSplitModuleInNavigatorKey</key> 327 <key>PBXSplitModuleInNavigatorKey</key>
327 <dict> 328 <dict>
328 <key>Split0</key> 329 <key>Split0</key>
@@ -330,31 +331,41 @@ @@ -330,31 +331,41 @@
330 <key>PBXProjectModuleGUID</key> 331 <key>PBXProjectModuleGUID</key>
331 <string>1CE0B20406471E060097A5F4</string> 332 <string>1CE0B20406471E060097A5F4</string>
332 <key>PBXProjectModuleLabel</key> 333 <key>PBXProjectModuleLabel</key>
333 - <string>ASIHTTPRequest.m</string> 334 + <string>NSHTTPCookieAdditions.m</string>
334 <key>_historyCapacity</key> 335 <key>_historyCapacity</key>
335 <integer>0</integer> 336 <integer>0</integer>
336 <key>bookmark</key> 337 <key>bookmark</key>
337 - <string>B5B297440E7BCD91000B04CD</string> 338 + <string>B5F4C35B0EC47BB200D4F31C</string>
338 <key>history</key> 339 <key>history</key>
339 <array> 340 <array>
340 <string>B5731B8B0E4310180008024F</string> 341 <string>B5731B8B0E4310180008024F</string>
341 <string>B5731BBE0E4319180008024F</string> 342 <string>B5731BBE0E4319180008024F</string>
342 <string>B5731BEE0E431A050008024F</string> 343 <string>B5731BEE0E431A050008024F</string>
343 <string>B5731BEF0E431A050008024F</string> 344 <string>B5731BEF0E431A050008024F</string>
344 - <string>B5F3B7370E43683600E001FD</string>  
345 - <string>B567EF5C0E4EE4FC001E238F</string>  
346 - <string>B567EF5D0E4EE4FC001E238F</string>  
347 <string>B500B54C0E635A3200744D82</string> 345 <string>B500B54C0E635A3200744D82</string>
348 <string>B5CF35640E7A7B2C0050CBA7</string> 346 <string>B5CF35640E7A7B2C0050CBA7</string>
349 - <string>B5B2969F0E7BC6C7000B04CD</string> 347 + <string>B5CFFA620EC46252009ADE56</string>
350 - <string>B5B296BC0E7BC7E3000B04CD</string> 348 + <string>B5CFFA680EC46252009ADE56</string>
351 - <string>B5B296CC0E7BC846000B04CD</string> 349 + <string>B5CFFAF30EC46616009ADE56</string>
352 - <string>B5B297010E7BCA3D000B04CD</string> 350 + <string>B5CFFB6B0EC468F5009ADE56</string>
353 - <string>B5B297120E7BCB58000B04CD</string> 351 + <string>B5CFFB6C0EC468F5009ADE56</string>
354 - <string>B5B297340E7BCD41000B04CD</string> 352 + <string>B5CFFBDB0EC46E83009ADE56</string>
355 - <string>B5B297350E7BCD41000B04CD</string> 353 + <string>B5F4C1F40EC4725B00D4F31C</string>
356 - <string>B5B2973E0E7BCD91000B04CD</string> 354 + <string>B5F4C1F60EC4725B00D4F31C</string>
357 - <string>B5B2973F0E7BCD91000B04CD</string> 355 + <string>B5F4C1F70EC4725B00D4F31C</string>
  356 + <string>B5F4C1F90EC4725B00D4F31C</string>
  357 + <string>B5F4C2270EC473B300D4F31C</string>
  358 + <string>B5F4C2AB0EC4778E00D4F31C</string>
  359 + <string>B5F4C2AC0EC4778E00D4F31C</string>
  360 + <string>B5F4C2AD0EC4778E00D4F31C</string>
  361 + <string>B5F4C3120EC479AB00D4F31C</string>
  362 + <string>B5F4C3130EC479AB00D4F31C</string>
  363 + <string>B5F4C32E0EC47A2500D4F31C</string>
  364 + <string>B5F4C3510EC47B3A00D4F31C</string>
  365 + <string>B5F4C3520EC47B3A00D4F31C</string>
  366 + <string>B5F4C3530EC47B3A00D4F31C</string>
  367 + <string>B5F4C3540EC47B3A00D4F31C</string>
  368 + <string>B5CFFAEF0EC46616009ADE56</string>
358 </array> 369 </array>
359 <key>prevStack</key> 370 <key>prevStack</key>
360 <array> 371 <array>
@@ -371,59 +382,136 @@ @@ -371,59 +382,136 @@
371 <string>B5731BC00E4319180008024F</string> 382 <string>B5731BC00E4319180008024F</string>
372 <string>B5731BF60E431A050008024F</string> 383 <string>B5731BF60E431A050008024F</string>
373 <string>B5731D9B0E433A750008024F</string> 384 <string>B5731D9B0E433A750008024F</string>
374 - <string>B5F3B7390E43683600E001FD</string>  
375 <string>B567EF630E4EE4FC001E238F</string> 385 <string>B567EF630E4EE4FC001E238F</string>
376 <string>B5B3BC690E62DA0E0071D39F</string> 386 <string>B5B3BC690E62DA0E0071D39F</string>
377 <string>B5B3BC6C0E62DA0E0071D39F</string> 387 <string>B5B3BC6C0E62DA0E0071D39F</string>
378 <string>B5CF356D0E7A7B2C0050CBA7</string> 388 <string>B5CF356D0E7A7B2C0050CBA7</string>
379 - <string>B5B296A40E7BC6C7000B04CD</string> 389 + <string>B5CFFA6C0EC46252009ADE56</string>
380 - <string>B5B296A50E7BC6C7000B04CD</string> 390 + <string>B5CFFA6F0EC46252009ADE56</string>
381 - <string>B5B296A60E7BC6C7000B04CD</string> 391 + <string>B5CFFB7B0EC468F5009ADE56</string>
382 - <string>B5B296A70E7BC6C7000B04CD</string> 392 + <string>B5CFFBE00EC46E83009ADE56</string>
383 - <string>B5B296A80E7BC6C7000B04CD</string> 393 + <string>B5F4C1E10EC471D500D4F31C</string>
384 - <string>B5B296A90E7BC6C7000B04CD</string> 394 + <string>B5F4C1E20EC471D500D4F31C</string>
385 - <string>B5B296AA0E7BC6C7000B04CD</string> 395 + <string>B5F4C1FC0EC4725B00D4F31C</string>
386 - <string>B5B296AB0E7BC6C7000B04CD</string> 396 + <string>B5F4C1FD0EC4725B00D4F31C</string>
387 - <string>B5B296AC0E7BC6C7000B04CD</string> 397 + <string>B5F4C1FE0EC4725B00D4F31C</string>
388 - <string>B5B296AD0E7BC6C7000B04CD</string> 398 + <string>B5F4C1FF0EC4725B00D4F31C</string>
389 - <string>B5B296AE0E7BC6C7000B04CD</string> 399 + <string>B5F4C2000EC4725B00D4F31C</string>
390 - <string>B5B296AF0E7BC6C7000B04CD</string> 400 + <string>B5F4C2010EC4725B00D4F31C</string>
391 - <string>B5B296B00E7BC6C7000B04CD</string> 401 + <string>B5F4C2020EC4725B00D4F31C</string>
392 - <string>B5B296B10E7BC6C7000B04CD</string> 402 + <string>B5F4C2030EC4725B00D4F31C</string>
393 - <string>B5B296B20E7BC6C7000B04CD</string> 403 + <string>B5F4C2040EC4725B00D4F31C</string>
394 - <string>B5B296BF0E7BC7E3000B04CD</string> 404 + <string>B5F4C2050EC4725B00D4F31C</string>
395 - <string>B5B296C00E7BC7E3000B04CD</string> 405 + <string>B5F4C2060EC4725B00D4F31C</string>
396 - <string>B5B296C10E7BC7E3000B04CD</string> 406 + <string>B5F4C2070EC4725B00D4F31C</string>
397 - <string>B5B296C20E7BC7E3000B04CD</string> 407 + <string>B5F4C2080EC4725B00D4F31C</string>
398 - <string>B5B296C30E7BC7E3000B04CD</string> 408 + <string>B5F4C2090EC4725B00D4F31C</string>
399 - <string>B5B296C40E7BC7E3000B04CD</string> 409 + <string>B5F4C20A0EC4725B00D4F31C</string>
400 - <string>B5B296CF0E7BC846000B04CD</string> 410 + <string>B5F4C20B0EC4725B00D4F31C</string>
401 - <string>B5B296D00E7BC846000B04CD</string> 411 + <string>B5F4C20C0EC4725B00D4F31C</string>
402 - <string>B5B296D10E7BC846000B04CD</string> 412 + <string>B5F4C20D0EC4725B00D4F31C</string>
403 - <string>B5B296D20E7BC846000B04CD</string> 413 + <string>B5F4C20E0EC4725B00D4F31C</string>
404 - <string>B5B296E00E7BC8BA000B04CD</string> 414 + <string>B5F4C20F0EC4725B00D4F31C</string>
405 - <string>B5B296E10E7BC8BA000B04CD</string> 415 + <string>B5F4C2100EC4725B00D4F31C</string>
406 - <string>B5B296E20E7BC8BA000B04CD</string> 416 + <string>B5F4C2110EC4725B00D4F31C</string>
407 - <string>B5B296E30E7BC8BA000B04CD</string> 417 + <string>B5F4C21B0EC4729300D4F31C</string>
408 - <string>B5B296E40E7BC8BA000B04CD</string> 418 + <string>B5F4C21C0EC4729300D4F31C</string>
409 - <string>B5B296EC0E7BC92D000B04CD</string> 419 + <string>B5F4C21D0EC4729300D4F31C</string>
410 - <string>B5B296ED0E7BC92D000B04CD</string> 420 + <string>B5F4C22A0EC473B300D4F31C</string>
411 - <string>B5B297030E7BCA3D000B04CD</string> 421 + <string>B5F4C22B0EC473B300D4F31C</string>
412 - <string>B5B297040E7BCA3D000B04CD</string> 422 + <string>B5F4C22C0EC473B300D4F31C</string>
413 - <string>B5B297050E7BCA3D000B04CD</string> 423 + <string>B5F4C22D0EC473B300D4F31C</string>
414 - <string>B5B297060E7BCA3D000B04CD</string> 424 + <string>B5F4C22E0EC473B300D4F31C</string>
415 - <string>B5B297140E7BCB58000B04CD</string> 425 + <string>B5F4C22F0EC473B300D4F31C</string>
416 - <string>B5B297150E7BCB58000B04CD</string> 426 + <string>B5F4C2440EC4748700D4F31C</string>
417 - <string>B5B297280E7BCC8B000B04CD</string> 427 + <string>B5F4C2450EC4748700D4F31C</string>
418 - <string>B5B297370E7BCD41000B04CD</string> 428 + <string>B5F4C2460EC4748700D4F31C</string>
419 - <string>B5B297380E7BCD41000B04CD</string> 429 + <string>B5F4C2470EC4748700D4F31C</string>
420 - <string>B5B297390E7BCD41000B04CD</string> 430 + <string>B5F4C2480EC4748700D4F31C</string>
421 - <string>B5B2973A0E7BCD41000B04CD</string> 431 + <string>B5F4C2490EC4748700D4F31C</string>
422 - <string>B5B2973B0E7BCD41000B04CD</string> 432 + <string>B5F4C24A0EC4748700D4F31C</string>
423 - <string>B5B297400E7BCD91000B04CD</string> 433 + <string>B5F4C24B0EC4748700D4F31C</string>
424 - <string>B5B297410E7BCD91000B04CD</string> 434 + <string>B5F4C24C0EC4748700D4F31C</string>
425 - <string>B5B297420E7BCD91000B04CD</string> 435 + <string>B5F4C24D0EC4748700D4F31C</string>
426 - <string>B5B297430E7BCD91000B04CD</string> 436 + <string>B5F4C24E0EC4748700D4F31C</string>
  437 + <string>B5F4C24F0EC4748700D4F31C</string>
  438 + <string>B5F4C2500EC4748700D4F31C</string>
  439 + <string>B5F4C2510EC4748700D4F31C</string>
  440 + <string>B5F4C2520EC4748700D4F31C</string>
  441 + <string>B5F4C2530EC4748700D4F31C</string>
  442 + <string>B5F4C25B0EC474B100D4F31C</string>
  443 + <string>B5F4C25C0EC474B100D4F31C</string>
  444 + <string>B5F4C25D0EC474B100D4F31C</string>
  445 + <string>B5F4C25E0EC474B100D4F31C</string>
  446 + <string>B5F4C25F0EC474B100D4F31C</string>
  447 + <string>B5F4C2600EC474B100D4F31C</string>
  448 + <string>B5F4C2610EC474B100D4F31C</string>
  449 + <string>B5F4C2620EC474B100D4F31C</string>
  450 + <string>B5F4C2630EC474B100D4F31C</string>
  451 + <string>B5F4C2640EC474B100D4F31C</string>
  452 + <string>B5F4C26D0EC474E200D4F31C</string>
  453 + <string>B5F4C2740EC4755300D4F31C</string>
  454 + <string>B5F4C2810EC4758800D4F31C</string>
  455 + <string>B5F4C2820EC4758800D4F31C</string>
  456 + <string>B5F4C28B0EC475C200D4F31C</string>
  457 + <string>B5F4C28C0EC475C200D4F31C</string>
  458 + <string>B5F4C2910EC475D400D4F31C</string>
  459 + <string>B5F4C2920EC475D400D4F31C</string>
  460 + <string>B5F4C2970EC475F200D4F31C</string>
  461 + <string>B5F4C2B30EC4778E00D4F31C</string>
  462 + <string>B5F4C2B40EC4778E00D4F31C</string>
  463 + <string>B5F4C2B50EC4778E00D4F31C</string>
  464 + <string>B5F4C2B60EC4778E00D4F31C</string>
  465 + <string>B5F4C2B70EC4778E00D4F31C</string>
  466 + <string>B5F4C2B80EC4778E00D4F31C</string>
  467 + <string>B5F4C2B90EC4778E00D4F31C</string>
  468 + <string>B5F4C2BA0EC4778E00D4F31C</string>
  469 + <string>B5F4C2BB0EC4778E00D4F31C</string>
  470 + <string>B5F4C2BC0EC4778E00D4F31C</string>
  471 + <string>B5F4C2BD0EC4778E00D4F31C</string>
  472 + <string>B5F4C2BE0EC4778E00D4F31C</string>
  473 + <string>B5F4C2BF0EC4778E00D4F31C</string>
  474 + <string>B5F4C2C00EC4778E00D4F31C</string>
  475 + <string>B5F4C2C10EC4778E00D4F31C</string>
  476 + <string>B5F4C2C20EC4778E00D4F31C</string>
  477 + <string>B5F4C2C30EC4778E00D4F31C</string>
  478 + <string>B5F4C2C40EC4778E00D4F31C</string>
  479 + <string>B5F4C2C50EC4778E00D4F31C</string>
  480 + <string>B5F4C2C60EC4778E00D4F31C</string>
  481 + <string>B5F4C2C70EC4778E00D4F31C</string>
  482 + <string>B5F4C2C80EC4778E00D4F31C</string>
  483 + <string>B5F4C2C90EC4778E00D4F31C</string>
  484 + <string>B5F4C2CE0EC477C900D4F31C</string>
  485 + <string>B5F4C2DA0EC4784000D4F31C</string>
  486 + <string>B5F4C2DB0EC4784000D4F31C</string>
  487 + <string>B5F4C2DC0EC4784000D4F31C</string>
  488 + <string>B5F4C2E90EC478DD00D4F31C</string>
  489 + <string>B5F4C2EA0EC478DD00D4F31C</string>
  490 + <string>B5F4C2EB0EC478DD00D4F31C</string>
  491 + <string>B5F4C2EC0EC478DD00D4F31C</string>
  492 + <string>B5F4C2ED0EC478DD00D4F31C</string>
  493 + <string>B5F4C2EE0EC478DD00D4F31C</string>
  494 + <string>B5F4C2FB0EC4791600D4F31C</string>
  495 + <string>B5F4C3050EC4793B00D4F31C</string>
  496 + <string>B5F4C3060EC4793B00D4F31C</string>
  497 + <string>B5F4C3070EC4793B00D4F31C</string>
  498 + <string>B5F4C3080EC4793B00D4F31C</string>
  499 + <string>B5F4C3170EC479AB00D4F31C</string>
  500 + <string>B5F4C3180EC479AB00D4F31C</string>
  501 + <string>B5F4C3190EC479AB00D4F31C</string>
  502 + <string>B5F4C31A0EC479AB00D4F31C</string>
  503 + <string>B5F4C31B0EC479AB00D4F31C</string>
  504 + <string>B5F4C3270EC47A0800D4F31C</string>
  505 + <string>B5F4C3280EC47A0800D4F31C</string>
  506 + <string>B5F4C3290EC47A0800D4F31C</string>
  507 + <string>B5F4C32A0EC47A0800D4F31C</string>
  508 + <string>B5F4C32F0EC47A2500D4F31C</string>
  509 + <string>B5F4C3360EC47A4500D4F31C</string>
  510 + <string>B5F4C3370EC47A4500D4F31C</string>
  511 + <string>B5F4C3550EC47B3A00D4F31C</string>
  512 + <string>B5F4C3560EC47B3A00D4F31C</string>
  513 + <string>B5F4C3570EC47B3A00D4F31C</string>
  514 + <string>B5F4C3580EC47B3A00D4F31C</string>
427 </array> 515 </array>
428 </dict> 516 </dict>
429 <key>SplitCount</key> 517 <key>SplitCount</key>
@@ -437,7 +525,7 @@ @@ -437,7 +525,7 @@
437 <key>Frame</key> 525 <key>Frame</key>
438 <string>{{0, 0}, {1098, 836}}</string> 526 <string>{{0, 0}, {1098, 836}}</string>
439 <key>RubberWindowFrame</key> 527 <key>RubberWindowFrame</key>
440 - <string>227 156 1432 976 0 0 1920 1178 </string> 528 + <string>238 198 1432 976 0 0 1920 1178 </string>
441 </dict> 529 </dict>
442 <key>Module</key> 530 <key>Module</key>
443 <string>PBXNavigatorGroup</string> 531 <string>PBXNavigatorGroup</string>
@@ -457,7 +545,7 @@ @@ -457,7 +545,7 @@
457 <key>Frame</key> 545 <key>Frame</key>
458 <string>{{0, 841}, {1098, 94}}</string> 546 <string>{{0, 841}, {1098, 94}}</string>
459 <key>RubberWindowFrame</key> 547 <key>RubberWindowFrame</key>
460 - <string>227 156 1432 976 0 0 1920 1178 </string> 548 + <string>238 198 1432 976 0 0 1920 1178 </string>
461 </dict> 549 </dict>
462 <key>Module</key> 550 <key>Module</key>
463 <string>XCDetailModule</string> 551 <string>XCDetailModule</string>
@@ -481,9 +569,9 @@ @@ -481,9 +569,9 @@
481 </array> 569 </array>
482 <key>TableOfContents</key> 570 <key>TableOfContents</key>
483 <array> 571 <array>
484 - <string>B5B296B40E7BC6C7000B04CD</string> 572 + <string>B5F4C1E40EC471D500D4F31C</string>
485 <string>1CE0B1FE06471DED0097A5F4</string> 573 <string>1CE0B1FE06471DED0097A5F4</string>
486 - <string>B5B296B50E7BC6C7000B04CD</string> 574 + <string>B5F4C1E50EC471D500D4F31C</string>
487 <string>1CE0B20306471E060097A5F4</string> 575 <string>1CE0B20306471E060097A5F4</string>
488 <string>1CE0B20506471E060097A5F4</string> 576 <string>1CE0B20506471E060097A5F4</string>
489 </array> 577 </array>
@@ -617,16 +705,16 @@ @@ -617,16 +705,16 @@
617 <integer>5</integer> 705 <integer>5</integer>
618 <key>WindowOrderList</key> 706 <key>WindowOrderList</key>
619 <array> 707 <array>
620 - <string>B5B296C70E7BC7E3000B04CD</string> 708 + <string>1C530D57069F1CE1000CFCEE</string>
621 - <string>B5B296C80E7BC7E3000B04CD</string> 709 + <string>B5F4C2550EC4748700D4F31C</string>
  710 + <string>B5F4C2560EC4748700D4F31C</string>
622 <string>B5ABC8410E24CDE70072F422</string> 711 <string>B5ABC8410E24CDE70072F422</string>
623 - <string>1CD10A99069EF8BA00B06720</string>  
624 <string>1C78EAAD065D492600B07095</string> 712 <string>1C78EAAD065D492600B07095</string>
625 - <string>1C530D57069F1CE1000CFCEE</string> 713 + <string>1CD10A99069EF8BA00B06720</string>
626 <string>/Users/ben/asi-http-request/asi-http-request.xcodeproj</string> 714 <string>/Users/ben/asi-http-request/asi-http-request.xcodeproj</string>
627 </array> 715 </array>
628 <key>WindowString</key> 716 <key>WindowString</key>
629 - <string>227 156 1432 976 0 0 1920 1178 </string> 717 + <string>238 198 1432 976 0 0 1920 1178 </string>
630 <key>WindowToolsV3</key> 718 <key>WindowToolsV3</key>
631 <array> 719 <array>
632 <dict> 720 <dict>
@@ -656,7 +744,7 @@ @@ -656,7 +744,7 @@
656 <key>Frame</key> 744 <key>Frame</key>
657 <string>{{0, 0}, {1279, 533}}</string> 745 <string>{{0, 0}, {1279, 533}}</string>
658 <key>RubberWindowFrame</key> 746 <key>RubberWindowFrame</key>
659 - <string>205 95 1279 815 0 0 1920 1178 </string> 747 + <string>503 131 1279 815 0 0 1920 1178 </string>
660 </dict> 748 </dict>
661 <key>Module</key> 749 <key>Module</key>
662 <string>PBXNavigatorGroup</string> 750 <string>PBXNavigatorGroup</string>
@@ -682,7 +770,7 @@ @@ -682,7 +770,7 @@
682 <key>Frame</key> 770 <key>Frame</key>
683 <string>{{0, 538}, {1279, 236}}</string> 771 <string>{{0, 538}, {1279, 236}}</string>
684 <key>RubberWindowFrame</key> 772 <key>RubberWindowFrame</key>
685 - <string>205 95 1279 815 0 0 1920 1178 </string> 773 + <string>503 131 1279 815 0 0 1920 1178 </string>
686 </dict> 774 </dict>
687 <key>Module</key> 775 <key>Module</key>
688 <string>PBXBuildResultsModule</string> 776 <string>PBXBuildResultsModule</string>
@@ -705,18 +793,18 @@ @@ -705,18 +793,18 @@
705 <key>TableOfContents</key> 793 <key>TableOfContents</key>
706 <array> 794 <array>
707 <string>B5ABC8410E24CDE70072F422</string> 795 <string>B5ABC8410E24CDE70072F422</string>
708 - <string>B5B2969B0E7BC6B2000B04CD</string> 796 + <string>B5F4C1E60EC471D500D4F31C</string>
709 <string>1CD0528F0623707200166675</string> 797 <string>1CD0528F0623707200166675</string>
710 <string>XCMainBuildResultsModuleGUID</string> 798 <string>XCMainBuildResultsModuleGUID</string>
711 </array> 799 </array>
712 <key>ToolbarConfiguration</key> 800 <key>ToolbarConfiguration</key>
713 <string>xcode.toolbar.config.buildV3</string> 801 <string>xcode.toolbar.config.buildV3</string>
714 <key>WindowString</key> 802 <key>WindowString</key>
715 - <string>205 95 1279 815 0 0 1920 1178 </string> 803 + <string>503 131 1279 815 0 0 1920 1178 </string>
716 <key>WindowToolGUID</key> 804 <key>WindowToolGUID</key>
717 <string>B5ABC8410E24CDE70072F422</string> 805 <string>B5ABC8410E24CDE70072F422</string>
718 <key>WindowToolIsVisible</key> 806 <key>WindowToolIsVisible</key>
719 - <true/> 807 + <false/>
720 </dict> 808 </dict>
721 <dict> 809 <dict>
722 <key>FirstTimeWindowDisplayed</key> 810 <key>FirstTimeWindowDisplayed</key>
@@ -799,10 +887,10 @@ @@ -799,10 +887,10 @@
799 <key>Frame</key> 887 <key>Frame</key>
800 <string>{{684, 0}, {817, 397}}</string> 888 <string>{{684, 0}, {817, 397}}</string>
801 <key>RubberWindowFrame</key> 889 <key>RubberWindowFrame</key>
802 - <string>63 130 1501 786 0 0 1920 1178 </string> 890 + <string>160 76 1501 786 0 0 1920 1178 </string>
803 </dict> 891 </dict>
804 <key>RubberWindowFrame</key> 892 <key>RubberWindowFrame</key>
805 - <string>63 130 1501 786 0 0 1920 1178 </string> 893 + <string>160 76 1501 786 0 0 1920 1178 </string>
806 </dict> 894 </dict>
807 <key>Module</key> 895 <key>Module</key>
808 <string>PBXDebugSessionModule</string> 896 <string>PBXDebugSessionModule</string>
@@ -825,18 +913,18 @@ @@ -825,18 +913,18 @@
825 <key>TableOfContents</key> 913 <key>TableOfContents</key>
826 <array> 914 <array>
827 <string>1CD10A99069EF8BA00B06720</string> 915 <string>1CD10A99069EF8BA00B06720</string>
828 - <string>B5B2968F0E7BC60E000B04CD</string> 916 + <string>B5F4C1E70EC471D500D4F31C</string>
829 <string>1C162984064C10D400B95A72</string> 917 <string>1C162984064C10D400B95A72</string>
830 - <string>B5B296900E7BC60E000B04CD</string> 918 + <string>B5F4C1E80EC471D500D4F31C</string>
831 - <string>B5B296910E7BC60E000B04CD</string> 919 + <string>B5F4C1E90EC471D500D4F31C</string>
832 - <string>B5B296920E7BC60E000B04CD</string> 920 + <string>B5F4C1EA0EC471D500D4F31C</string>
833 - <string>B5B296930E7BC60E000B04CD</string> 921 + <string>B5F4C1EB0EC471D500D4F31C</string>
834 - <string>B5B296940E7BC60E000B04CD</string> 922 + <string>B5F4C1EC0EC471D500D4F31C</string>
835 </array> 923 </array>
836 <key>ToolbarConfiguration</key> 924 <key>ToolbarConfiguration</key>
837 <string>xcode.toolbar.config.debugV3</string> 925 <string>xcode.toolbar.config.debugV3</string>
838 <key>WindowString</key> 926 <key>WindowString</key>
839 - <string>63 130 1501 786 0 0 1920 1178 </string> 927 + <string>160 76 1501 786 0 0 1920 1178 </string>
840 <key>WindowToolGUID</key> 928 <key>WindowToolGUID</key>
841 <string>1CD10A99069EF8BA00B06720</string> 929 <string>1CD10A99069EF8BA00B06720</string>
842 <key>WindowToolIsVisible</key> 930 <key>WindowToolIsVisible</key>
@@ -858,12 +946,14 @@ @@ -858,12 +946,14 @@
858 <key>Dock</key> 946 <key>Dock</key>
859 <array> 947 <array>
860 <dict> 948 <dict>
  949 + <key>BecomeActive</key>
  950 + <true/>
861 <key>ContentConfiguration</key> 951 <key>ContentConfiguration</key>
862 <dict> 952 <dict>
863 <key>PBXProjectModuleGUID</key> 953 <key>PBXProjectModuleGUID</key>
864 <string>1CDD528C0622207200134675</string> 954 <string>1CDD528C0622207200134675</string>
865 <key>PBXProjectModuleLabel</key> 955 <key>PBXProjectModuleLabel</key>
866 - <string>ASIHTTPRequest.m</string> 956 + <string>AppDelegate.m</string>
867 <key>StatusBarVisibility</key> 957 <key>StatusBarVisibility</key>
868 <true/> 958 <true/>
869 </dict> 959 </dict>
@@ -884,8 +974,6 @@ @@ -884,8 +974,6 @@
884 <string>212pt</string> 974 <string>212pt</string>
885 </dict> 975 </dict>
886 <dict> 976 <dict>
887 - <key>BecomeActive</key>  
888 - <true/>  
889 <key>ContentConfiguration</key> 977 <key>ContentConfiguration</key>
890 <dict> 978 <dict>
891 <key>PBXProjectModuleGUID</key> 979 <key>PBXProjectModuleGUID</key>
@@ -921,8 +1009,8 @@ @@ -921,8 +1009,8 @@
921 <key>TableOfContents</key> 1009 <key>TableOfContents</key>
922 <array> 1010 <array>
923 <string>1C530D57069F1CE1000CFCEE</string> 1011 <string>1C530D57069F1CE1000CFCEE</string>
924 - <string>B5B297300E7BCD05000B04CD</string> 1012 + <string>B5F4C3440EC47AED00D4F31C</string>
925 - <string>B5B297310E7BCD05000B04CD</string> 1013 + <string>B5F4C3450EC47AED00D4F31C</string>
926 <string>1CDD528C0622207200134675</string> 1014 <string>1CDD528C0622207200134675</string>
927 <string>1CD0528E0623707200166675</string> 1015 <string>1CD0528E0623707200166675</string>
928 </array> 1016 </array>
@@ -931,7 +1019,7 @@ @@ -931,7 +1019,7 @@
931 <key>WindowToolGUID</key> 1019 <key>WindowToolGUID</key>
932 <string>1C530D57069F1CE1000CFCEE</string> 1020 <string>1C530D57069F1CE1000CFCEE</string>
933 <key>WindowToolIsVisible</key> 1021 <key>WindowToolIsVisible</key>
934 - <true/> 1022 + <false/>
935 </dict> 1023 </dict>
936 <dict> 1024 <dict>
937 <key>Identifier</key> 1025 <key>Identifier</key>
@@ -987,7 +1075,7 @@ @@ -987,7 +1075,7 @@
987 <key>TableOfContents</key> 1075 <key>TableOfContents</key>
988 <array> 1076 <array>
989 <string>1C78EAAD065D492600B07095</string> 1077 <string>1C78EAAD065D492600B07095</string>
990 - <string>B5B296B60E7BC6C7000B04CD</string> 1078 + <string>B5F4C1ED0EC471D500D4F31C</string>
991 <string>1C78EAAC065D492600B07095</string> 1079 <string>1C78EAAC065D492600B07095</string>
992 </array> 1080 </array>
993 <key>ToolbarConfiguration</key> 1081 <key>ToolbarConfiguration</key>
@@ -1325,22 +1413,40 @@ @@ -1325,22 +1413,40 @@
1325 <string>538 42 401 187 0 0 1280 1002 </string> 1413 <string>538 42 401 187 0 0 1280 1002 </string>
1326 </dict> 1414 </dict>
1327 <dict> 1415 <dict>
  1416 + <key>FirstTimeWindowDisplayed</key>
  1417 + <false/>
1328 <key>Identifier</key> 1418 <key>Identifier</key>
1329 <string>windowTool.projectFormatConflicts</string> 1419 <string>windowTool.projectFormatConflicts</string>
  1420 + <key>IsVertical</key>
  1421 + <true/>
1330 <key>Layout</key> 1422 <key>Layout</key>
1331 <array> 1423 <array>
1332 <dict> 1424 <dict>
1333 <key>Dock</key> 1425 <key>Dock</key>
1334 <array> 1426 <array>
1335 <dict> 1427 <dict>
  1428 + <key>BecomeActive</key>
  1429 + <true/>
  1430 + <key>ContentConfiguration</key>
  1431 + <dict>
  1432 + <key>PBXProjectModuleGUID</key>
  1433 + <string>B5CFFB040EC46616009ADE56</string>
  1434 + </dict>
  1435 + <key>GeometryConfiguration</key>
  1436 + <dict>
  1437 + <key>Frame</key>
  1438 + <string>{{0, 0}, {472, 302}}</string>
  1439 + <key>RubberWindowFrame</key>
  1440 + <string>268 833 472 322 0 0 1920 1178 </string>
  1441 + </dict>
1336 <key>Module</key> 1442 <key>Module</key>
1337 <string>XCProjectFormatConflictsModule</string> 1443 <string>XCProjectFormatConflictsModule</string>
1338 <key>Proportion</key> 1444 <key>Proportion</key>
1339 - <string>100%</string> 1445 + <string>302pt</string>
1340 </dict> 1446 </dict>
1341 </array> 1447 </array>
1342 <key>Proportion</key> 1448 <key>Proportion</key>
1343 - <string>100%</string> 1449 + <string>302pt</string>
1344 </dict> 1450 </dict>
1345 </array> 1451 </array>
1346 <key>Name</key> 1452 <key>Name</key>
@@ -1350,11 +1456,21 @@ @@ -1350,11 +1456,21 @@
1350 <string>XCProjectFormatConflictsModule</string> 1456 <string>XCProjectFormatConflictsModule</string>
1351 </array> 1457 </array>
1352 <key>StatusbarIsVisible</key> 1458 <key>StatusbarIsVisible</key>
1353 - <integer>0</integer> 1459 + <false/>
  1460 + <key>TableOfContents</key>
  1461 + <array>
  1462 + <string>B5CFFB050EC46616009ADE56</string>
  1463 + <string>B5CFFB060EC46616009ADE56</string>
  1464 + <string>B5CFFB040EC46616009ADE56</string>
  1465 + </array>
1354 <key>WindowContentMinSize</key> 1466 <key>WindowContentMinSize</key>
1355 <string>450 300</string> 1467 <string>450 300</string>
1356 <key>WindowString</key> 1468 <key>WindowString</key>
1357 - <string>50 850 472 307 0 0 1440 877</string> 1469 + <string>268 833 472 322 0 0 1920 1178 </string>
  1470 + <key>WindowToolGUID</key>
  1471 + <string>B5CFFB050EC46616009ADE56</string>
  1472 + <key>WindowToolIsVisible</key>
  1473 + <true/>
1358 </dict> 1474 </dict>
1359 <dict> 1475 <dict>
1360 <key>Identifier</key> 1476 <key>Identifier</key>
This diff could not be displayed because it is too large.
This diff was suppressed by a .gitattributes entry.
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>CFBundleDevelopmentRegion</key>
  6 + <string>English</string>
  7 + <key>CFBundleExecutable</key>
  8 + <string>${EXECUTABLE_NAME}</string>
  9 + <key>CFBundleIdentifier</key>
  10 + <string>com.yourcompany.${PRODUCT_NAME:identifier}</string>
  11 + <key>CFBundleInfoDictionaryVersion</key>
  12 + <string>6.0</string>
  13 + <key>CFBundlePackageType</key>
  14 + <string>APPL</string>
  15 + <key>CFBundleSignature</key>
  16 + <string>????</string>
  17 + <key>CFBundleVersion</key>
  18 + <string>1.0</string>
  19 + <key>NSMainNibFile</key>
  20 + <string>MainWindow</string>
  21 +</dict>
  22 +</plist>
  1 +//
  2 +// Prefix header for all source files of the 'asi-http-request' target in the 'asi-http-request' project
  3 +//
  4 +
  5 +#ifdef __OBJC__
  6 +#import <Foundation/Foundation.h>
  7 +#import <CFNetwork/CFNetwork.h>
  8 +#import <UIKit/UIKit.h>
  9 +#endif
  1 +//
  2 +// iPhone-Sample-main.m
  3 +// asi-http-request
  4 +//
  5 +// Created by Ben Copsey on 09/07/2008.
  6 +// Copyright __MyCompanyName__ 2008. All rights reserved.
  7 +//
  8 +
  9 +#import <UIKit/UIKit.h>
  10 +
  11 +int main(int argc, char *argv[]) {
  12 +
  13 + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  14 + int retVal = UIApplicationMain(argc, argv, nil, nil);
  15 + [pool release];
  16 + return retVal;
  17 +}
  18 +
  1 +//
  2 +// iPhoneSampleAppDelegate.h
  3 +// asi-http-request
  4 +//
  5 +// Created by Ben Copsey on 07/11/2008.
  6 +// Copyright All-Seeing Interactive 2008. All rights reserved.
  7 +//
  8 +
  9 +#import <UIKit/UIKit.h>
  10 +
  11 +@interface iPhoneSampleAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {
  12 + UIWindow *window;
  13 + UITabBarController *tabBarController;
  14 +
  15 +}
  16 +
  17 +
  18 +@property (nonatomic, retain) IBOutlet UIWindow *window;
  19 +@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
  20 +
  21 +@end
  1 +//
  2 +// iPhoneSampleAppDelegate.m
  3 +// asi-http-request
  4 +//
  5 +// Created by Ben Copsey on 07/11/2008.
  6 +// Copyright All-Seeing Interactive 2008. All rights reserved.
  7 +//
  8 +
  9 +#import "iPhoneSampleAppDelegate.h"
  10 +#import "ASIHTTPRequest.h"
  11 +
  12 +@implementation iPhoneSampleAppDelegate
  13 +
  14 +@synthesize window;
  15 +@synthesize tabBarController;
  16 +
  17 +
  18 +
  19 +- (void)dealloc {
  20 + [tabBarController release];
  21 + [window release];
  22 + [super dealloc];
  23 +}
  24 +
  25 +
  26 +- (void)applicationDidFinishLaunching:(UIApplication *)application {
  27 +
  28 + // Add the tab bar controller's current view as a subview of the window
  29 + [window addSubview:tabBarController.view];
  30 +}
  31 +
  32 +
  33 +@end
  34 +
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.02">
  3 + <data>
  4 + <int key="IBDocument.SystemTarget">528</int>
  5 + <string key="IBDocument.SystemVersion">9F33</string>
  6 + <string key="IBDocument.InterfaceBuilderVersion">672</string>
  7 + <string key="IBDocument.AppKitVersion">949.34</string>
  8 + <string key="IBDocument.HIToolboxVersion">352.00</string>
  9 + <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
  10 + <bool key="EncodedWithXMLCoder">YES</bool>
  11 + <integer value="106"/>
  12 + </object>
  13 + <object class="NSArray" key="IBDocument.PluginDependencies">
  14 + <bool key="EncodedWithXMLCoder">YES</bool>
  15 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  16 + </object>
  17 + <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
  18 + <bool key="EncodedWithXMLCoder">YES</bool>
  19 + <object class="IBProxyObject" id="841351856">
  20 + <string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
  21 + </object>
  22 + <object class="IBProxyObject" id="532797962">
  23 + <string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
  24 + </object>
  25 + <object class="IBUICustomObject" id="664661524"/>
  26 + <object class="IBUIWindow" id="380026005">
  27 + <nil key="NSNextResponder"/>
  28 + <int key="NSvFlags">1316</int>
  29 + <object class="NSPSMatrix" key="NSFrameMatrix"/>
  30 + <string key="NSFrameSize">{320, 480}</string>
  31 + <object class="NSColor" key="IBUIBackgroundColor">
  32 + <int key="NSColorSpace">1</int>
  33 + <bytes key="NSRGB">MSAxIDEAA</bytes>
  34 + </object>
  35 + <bool key="IBUIOpaque">NO</bool>
  36 + <bool key="IBUIClearsContextBeforeDrawing">NO</bool>
  37 + <object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
  38 + <bool key="IBUIVisibleAtLaunch">YES</bool>
  39 + </object>
  40 + <object class="IBUITabBarController" id="1034742383">
  41 + <object class="IBUISimulatedTabBarMetrics" key="IBUISimulatedBottomBarMetrics"/>
  42 + <object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
  43 + <object class="IBUIViewController" key="IBUISelectedViewController" id="268481961">
  44 + <object class="IBUITabBarItem" key="IBUITabBarItem" id="807309489">
  45 + <string key="IBUITitle">Queue</string>
  46 + <reference key="IBUITabBar"/>
  47 + </object>
  48 + <reference key="IBUIParentViewController" ref="1034742383"/>
  49 + <string key="IBUINibName">Queue</string>
  50 + </object>
  51 + <object class="NSMutableArray" key="IBUIViewControllers">
  52 + <bool key="EncodedWithXMLCoder">YES</bool>
  53 + <object class="IBUIViewController" id="1024858337">
  54 + <object class="IBUITabBarItem" key="IBUITabBarItem" id="765670903">
  55 + <string key="IBUITitle">Synchronous</string>
  56 + <reference key="IBUITabBar"/>
  57 + </object>
  58 + <reference key="IBUIParentViewController" ref="1034742383"/>
  59 + <string key="IBUINibName">Synchronous</string>
  60 + </object>
  61 + <reference ref="268481961"/>
  62 + </object>
  63 + <object class="IBUITabBar" key="IBUITabBar" id="795333663">
  64 + <nil key="NSNextResponder"/>
  65 + <int key="NSvFlags">266</int>
  66 + <string key="NSFrame">{{129, 330}, {163, 49}}</string>
  67 + <object class="NSColor" key="IBUIBackgroundColor">
  68 + <int key="NSColorSpace">3</int>
  69 + <bytes key="NSWhite">MCAwAA</bytes>
  70 + </object>
  71 + <bool key="IBUIClearsContextBeforeDrawing">NO</bool>
  72 + </object>
  73 + </object>
  74 + </object>
  75 + <object class="IBObjectContainer" key="IBDocument.Objects">
  76 + <object class="NSMutableArray" key="connectionRecords">
  77 + <bool key="EncodedWithXMLCoder">YES</bool>
  78 + <object class="IBConnectionRecord">
  79 + <object class="IBCocoaTouchOutletConnection" key="connection">
  80 + <string key="label">window</string>
  81 + <reference key="source" ref="664661524"/>
  82 + <reference key="destination" ref="380026005"/>
  83 + </object>
  84 + <int key="connectionID">9</int>
  85 + </object>
  86 + <object class="IBConnectionRecord">
  87 + <object class="IBCocoaTouchOutletConnection" key="connection">
  88 + <string key="label">delegate</string>
  89 + <reference key="source" ref="841351856"/>
  90 + <reference key="destination" ref="664661524"/>
  91 + </object>
  92 + <int key="connectionID">99</int>
  93 + </object>
  94 + <object class="IBConnectionRecord">
  95 + <object class="IBCocoaTouchOutletConnection" key="connection">
  96 + <string key="label">tabBarController</string>
  97 + <reference key="source" ref="664661524"/>
  98 + <reference key="destination" ref="1034742383"/>
  99 + </object>
  100 + <int key="connectionID">113</int>
  101 + </object>
  102 + </object>
  103 + <object class="IBMutableOrderedSet" key="objectRecords">
  104 + <object class="NSArray" key="orderedObjects">
  105 + <bool key="EncodedWithXMLCoder">YES</bool>
  106 + <object class="IBObjectRecord">
  107 + <int key="objectID">0</int>
  108 + <object class="NSArray" key="object" id="957960031">
  109 + <bool key="EncodedWithXMLCoder">YES</bool>
  110 + </object>
  111 + <reference key="children" ref="1000"/>
  112 + <nil key="parent"/>
  113 + </object>
  114 + <object class="IBObjectRecord">
  115 + <int key="objectID">2</int>
  116 + <reference key="object" ref="380026005"/>
  117 + <object class="NSMutableArray" key="children">
  118 + <bool key="EncodedWithXMLCoder">YES</bool>
  119 + </object>
  120 + <reference key="parent" ref="957960031"/>
  121 + </object>
  122 + <object class="IBObjectRecord">
  123 + <int key="objectID">-1</int>
  124 + <reference key="object" ref="841351856"/>
  125 + <reference key="parent" ref="957960031"/>
  126 + <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
  127 + </object>
  128 + <object class="IBObjectRecord">
  129 + <int key="objectID">3</int>
  130 + <reference key="object" ref="664661524"/>
  131 + <reference key="parent" ref="957960031"/>
  132 + </object>
  133 + <object class="IBObjectRecord">
  134 + <int key="objectID">106</int>
  135 + <reference key="object" ref="1034742383"/>
  136 + <object class="NSMutableArray" key="children">
  137 + <bool key="EncodedWithXMLCoder">YES</bool>
  138 + <reference ref="795333663"/>
  139 + <reference ref="1024858337"/>
  140 + <reference ref="268481961"/>
  141 + </object>
  142 + <reference key="parent" ref="957960031"/>
  143 + </object>
  144 + <object class="IBObjectRecord">
  145 + <int key="objectID">107</int>
  146 + <reference key="object" ref="795333663"/>
  147 + <reference key="parent" ref="1034742383"/>
  148 + </object>
  149 + <object class="IBObjectRecord">
  150 + <int key="objectID">108</int>
  151 + <reference key="object" ref="1024858337"/>
  152 + <object class="NSMutableArray" key="children">
  153 + <bool key="EncodedWithXMLCoder">YES</bool>
  154 + <reference ref="765670903"/>
  155 + </object>
  156 + <reference key="parent" ref="1034742383"/>
  157 + </object>
  158 + <object class="IBObjectRecord">
  159 + <int key="objectID">109</int>
  160 + <reference key="object" ref="268481961"/>
  161 + <object class="NSMutableArray" key="children">
  162 + <bool key="EncodedWithXMLCoder">YES</bool>
  163 + <reference ref="807309489"/>
  164 + </object>
  165 + <reference key="parent" ref="1034742383"/>
  166 + </object>
  167 + <object class="IBObjectRecord">
  168 + <int key="objectID">110</int>
  169 + <reference key="object" ref="807309489"/>
  170 + <reference key="parent" ref="268481961"/>
  171 + </object>
  172 + <object class="IBObjectRecord">
  173 + <int key="objectID">111</int>
  174 + <reference key="object" ref="765670903"/>
  175 + <reference key="parent" ref="1024858337"/>
  176 + </object>
  177 + <object class="IBObjectRecord">
  178 + <int key="objectID">-2</int>
  179 + <reference key="object" ref="532797962"/>
  180 + <reference key="parent" ref="957960031"/>
  181 + </object>
  182 + </object>
  183 + </object>
  184 + <object class="NSMutableDictionary" key="flattenedProperties">
  185 + <bool key="EncodedWithXMLCoder">YES</bool>
  186 + <object class="NSMutableArray" key="dict.sortedKeys">
  187 + <bool key="EncodedWithXMLCoder">YES</bool>
  188 + <string>-1.CustomClassName</string>
  189 + <string>-2.CustomClassName</string>
  190 + <string>106.IBEditorWindowLastContentRect</string>
  191 + <string>106.IBPluginDependency</string>
  192 + <string>107.IBPluginDependency</string>
  193 + <string>108.CustomClassName</string>
  194 + <string>108.IBPluginDependency</string>
  195 + <string>109.CustomClassName</string>
  196 + <string>109.IBPluginDependency</string>
  197 + <string>110.IBPluginDependency</string>
  198 + <string>111.IBPluginDependency</string>
  199 + <string>2.IBAttributePlaceholdersKey</string>
  200 + <string>2.IBEditorWindowLastContentRect</string>
  201 + <string>2.IBPluginDependency</string>
  202 + <string>3.CustomClassName</string>
  203 + <string>3.IBPluginDependency</string>
  204 + </object>
  205 + <object class="NSMutableArray" key="dict.values">
  206 + <bool key="EncodedWithXMLCoder">YES</bool>
  207 + <string>UIApplication</string>
  208 + <string>UIResponder</string>
  209 + <string>{{391, 355}, {320, 480}}</string>
  210 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  211 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  212 + <string>SynchronousViewController</string>
  213 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  214 + <string>QueueViewController</string>
  215 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  216 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  217 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  218 + <object class="NSMutableDictionary">
  219 + <bool key="EncodedWithXMLCoder">YES</bool>
  220 + <object class="NSArray" key="dict.sortedKeys">
  221 + <bool key="EncodedWithXMLCoder">YES</bool>
  222 + </object>
  223 + <object class="NSMutableArray" key="dict.values">
  224 + <bool key="EncodedWithXMLCoder">YES</bool>
  225 + </object>
  226 + </object>
  227 + <string>{{229, 373}, {320, 480}}</string>
  228 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  229 + <string>iPhoneSampleAppDelegate</string>
  230 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  231 + </object>
  232 + </object>
  233 + <object class="NSMutableDictionary" key="unlocalizedProperties">
  234 + <bool key="EncodedWithXMLCoder">YES</bool>
  235 + <object class="NSArray" key="dict.sortedKeys">
  236 + <bool key="EncodedWithXMLCoder">YES</bool>
  237 + </object>
  238 + <object class="NSMutableArray" key="dict.values">
  239 + <bool key="EncodedWithXMLCoder">YES</bool>
  240 + </object>
  241 + </object>
  242 + <nil key="activeLocalization"/>
  243 + <object class="NSMutableDictionary" key="localizations">
  244 + <bool key="EncodedWithXMLCoder">YES</bool>
  245 + <object class="NSArray" key="dict.sortedKeys">
  246 + <bool key="EncodedWithXMLCoder">YES</bool>
  247 + </object>
  248 + <object class="NSMutableArray" key="dict.values">
  249 + <bool key="EncodedWithXMLCoder">YES</bool>
  250 + </object>
  251 + </object>
  252 + <nil key="sourceID"/>
  253 + <int key="maxID">123</int>
  254 + </object>
  255 + <object class="IBClassDescriber" key="IBDocument.Classes">
  256 + <object class="NSMutableArray" key="referencedPartialClassDescriptions">
  257 + <bool key="EncodedWithXMLCoder">YES</bool>
  258 + <object class="IBPartialClassDescription">
  259 + <string key="className">QueueViewController</string>
  260 + <string key="superclassName">UIViewController</string>
  261 + <object class="NSMutableDictionary" key="actions">
  262 + <string key="NS.key.0">fetchThreeImages:</string>
  263 + <string key="NS.object.0">id</string>
  264 + </object>
  265 + <object class="NSMutableDictionary" key="outlets">
  266 + <bool key="EncodedWithXMLCoder">YES</bool>
  267 + <object class="NSMutableArray" key="dict.sortedKeys">
  268 + <bool key="EncodedWithXMLCoder">YES</bool>
  269 + <string>imageView1</string>
  270 + <string>imageView2</string>
  271 + <string>imageView3</string>
  272 + <string>progressIndicator</string>
  273 + </object>
  274 + <object class="NSMutableArray" key="dict.values">
  275 + <bool key="EncodedWithXMLCoder">YES</bool>
  276 + <string>UIImageView</string>
  277 + <string>UIImageView</string>
  278 + <string>UIImageView</string>
  279 + <string>UIProgressView</string>
  280 + </object>
  281 + </object>
  282 + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  283 + <string key="majorKey">IBProjectSource</string>
  284 + <string key="minorKey">QueueViewController.h</string>
  285 + </object>
  286 + </object>
  287 + <object class="IBPartialClassDescription">
  288 + <string key="className">SynchronousViewController</string>
  289 + <string key="superclassName">UIViewController</string>
  290 + <object class="NSMutableDictionary" key="actions">
  291 + <string key="NS.key.0">simpleURLFetch:</string>
  292 + <string key="NS.object.0">id</string>
  293 + </object>
  294 + <object class="NSMutableDictionary" key="outlets">
  295 + <string key="NS.key.0">htmlSource</string>
  296 + <string key="NS.object.0">UITextView</string>
  297 + </object>
  298 + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  299 + <string key="majorKey">IBProjectSource</string>
  300 + <string key="minorKey">SynchronousViewController.h</string>
  301 + </object>
  302 + </object>
  303 + <object class="IBPartialClassDescription">
  304 + <string key="className">iPhoneSampleAppDelegate</string>
  305 + <string key="superclassName">NSObject</string>
  306 + <object class="NSMutableDictionary" key="outlets">
  307 + <bool key="EncodedWithXMLCoder">YES</bool>
  308 + <object class="NSMutableArray" key="dict.sortedKeys">
  309 + <bool key="EncodedWithXMLCoder">YES</bool>
  310 + <string>tabBarController</string>
  311 + <string>window</string>
  312 + </object>
  313 + <object class="NSMutableArray" key="dict.values">
  314 + <bool key="EncodedWithXMLCoder">YES</bool>
  315 + <string>UITabBarController</string>
  316 + <string>UIWindow</string>
  317 + </object>
  318 + </object>
  319 + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  320 + <string key="majorKey">IBProjectSource</string>
  321 + <string key="minorKey">iPhoneSampleAppDelegate.h</string>
  322 + </object>
  323 + </object>
  324 + </object>
  325 + </object>
  326 + <int key="IBDocument.localizationMode">0</int>
  327 + <string key="IBDocument.LastKnownRelativeProjectPath">../asi-http-request.xcodeproj</string>
  328 + <int key="IBDocument.defaultPropertyAccessControl">3</int>
  329 + </data>
  330 +</archive>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.02">
  3 + <data>
  4 + <int key="IBDocument.SystemTarget">528</int>
  5 + <string key="IBDocument.SystemVersion">9F33</string>
  6 + <string key="IBDocument.InterfaceBuilderVersion">672</string>
  7 + <string key="IBDocument.AppKitVersion">949.34</string>
  8 + <string key="IBDocument.HIToolboxVersion">352.00</string>
  9 + <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
  10 + <bool key="EncodedWithXMLCoder">YES</bool>
  11 + <integer value="1"/>
  12 + </object>
  13 + <object class="NSArray" key="IBDocument.PluginDependencies">
  14 + <bool key="EncodedWithXMLCoder">YES</bool>
  15 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  16 + </object>
  17 + <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
  18 + <bool key="EncodedWithXMLCoder">YES</bool>
  19 + <object class="IBProxyObject" id="372490531">
  20 + <string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
  21 + </object>
  22 + <object class="IBProxyObject" id="263589821">
  23 + <string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
  24 + </object>
  25 + <object class="IBUIView" id="191373211">
  26 + <reference key="NSNextResponder"/>
  27 + <int key="NSvFlags">274</int>
  28 + <object class="NSMutableArray" key="NSSubviews">
  29 + <bool key="EncodedWithXMLCoder">YES</bool>
  30 + <object class="IBUILabel" id="602749642">
  31 + <reference key="NSNextResponder" ref="191373211"/>
  32 + <int key="NSvFlags">292</int>
  33 + <string key="NSFrame">{{20, 20}, {280, 46}}</string>
  34 + <reference key="NSSuperview" ref="191373211"/>
  35 + <bool key="IBUIOpaque">NO</bool>
  36 + <bool key="IBUIClipsSubviews">YES</bool>
  37 + <bool key="IBUIUserInteractionEnabled">NO</bool>
  38 + <string key="IBUIText">Demonstrates a fetching 3 items at once, using an NSOperationQueue.</string>
  39 + <object class="NSFont" key="IBUIFont">
  40 + <string key="NSName">Helvetica</string>
  41 + <double key="NSSize">1.400000e+01</double>
  42 + <int key="NSfFlags">16</int>
  43 + </object>
  44 + <object class="NSColor" key="IBUITextColor">
  45 + <int key="NSColorSpace">1</int>
  46 + <bytes key="NSRGB">MCAwIDAAA</bytes>
  47 + </object>
  48 + <nil key="IBUIHighlightedColor"/>
  49 + <int key="IBUIBaselineAdjustment">1</int>
  50 + <float key="IBUIMinimumFontSize">1.000000e+01</float>
  51 + <int key="IBUINumberOfLines">0</int>
  52 + </object>
  53 + <object class="IBUIButton" id="963091686">
  54 + <reference key="NSNextResponder" ref="191373211"/>
  55 + <int key="NSvFlags">292</int>
  56 + <string key="NSFrame">{{20, 74}, {72, 37}}</string>
  57 + <reference key="NSSuperview" ref="191373211"/>
  58 + <bool key="IBUIOpaque">NO</bool>
  59 + <bool key="IBUIClearsContextBeforeDrawing">NO</bool>
  60 + <int key="IBUIContentHorizontalAlignment">0</int>
  61 + <int key="IBUIContentVerticalAlignment">0</int>
  62 + <object class="NSFont" key="IBUIFont">
  63 + <string key="NSName">Helvetica-Bold</string>
  64 + <double key="NSSize">1.500000e+01</double>
  65 + <int key="NSfFlags">16</int>
  66 + </object>
  67 + <int key="IBUIButtonType">1</int>
  68 + <string key="IBUIHighlightedTitle">Go!</string>
  69 + <string key="IBUIDisabledTitle">Go!</string>
  70 + <string key="IBUISelectedTitle">Go!</string>
  71 + <string key="IBUINormalTitle">Go!</string>
  72 + <object class="NSColor" key="IBUIHighlightedTitleColor">
  73 + <int key="NSColorSpace">1</int>
  74 + <bytes key="NSRGB">MSAxIDEAA</bytes>
  75 + </object>
  76 + <object class="NSColor" key="IBUINormalTitleColor">
  77 + <int key="NSColorSpace">1</int>
  78 + <bytes key="NSRGB">MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA</bytes>
  79 + </object>
  80 + </object>
  81 + <object class="IBUIImageView" id="512691955">
  82 + <reference key="NSNextResponder" ref="191373211"/>
  83 + <int key="NSvFlags">292</int>
  84 + <string key="NSFrame">{{20, 124}, {135, 87}}</string>
  85 + <reference key="NSSuperview" ref="191373211"/>
  86 + <bool key="IBUIOpaque">NO</bool>
  87 + <bool key="IBUIClearsContextBeforeDrawing">NO</bool>
  88 + <int key="IBUIContentMode">1</int>
  89 + <bool key="IBUIUserInteractionEnabled">NO</bool>
  90 + </object>
  91 + <object class="IBUIImageView" id="496427125">
  92 + <reference key="NSNextResponder" ref="191373211"/>
  93 + <int key="NSvFlags">292</int>
  94 + <string key="NSFrame">{{20, 219}, {135, 87}}</string>
  95 + <reference key="NSSuperview" ref="191373211"/>
  96 + <bool key="IBUIOpaque">NO</bool>
  97 + <bool key="IBUIClearsContextBeforeDrawing">NO</bool>
  98 + <int key="IBUIContentMode">1</int>
  99 + <bool key="IBUIUserInteractionEnabled">NO</bool>
  100 + </object>
  101 + <object class="IBUIImageView" id="393184766">
  102 + <reference key="NSNextResponder" ref="191373211"/>
  103 + <int key="NSvFlags">292</int>
  104 + <string key="NSFrame">{{163, 124}, {137, 87}}</string>
  105 + <reference key="NSSuperview" ref="191373211"/>
  106 + <bool key="IBUIOpaque">NO</bool>
  107 + <bool key="IBUIClearsContextBeforeDrawing">NO</bool>
  108 + <int key="IBUIContentMode">1</int>
  109 + <bool key="IBUIUserInteractionEnabled">NO</bool>
  110 + </object>
  111 + <object class="IBUIProgressView" id="138477738">
  112 + <reference key="NSNextResponder" ref="191373211"/>
  113 + <int key="NSvFlags">292</int>
  114 + <string key="NSFrame">{{20, 325}, {280, 9}}</string>
  115 + <reference key="NSSuperview" ref="191373211"/>
  116 + <bool key="IBUIOpaque">NO</bool>
  117 + <bool key="IBUIClipsSubviews">YES</bool>
  118 + <bool key="IBUIMultipleTouchEnabled">YES</bool>
  119 + </object>
  120 + </object>
  121 + <string key="NSFrameSize">{320, 460}</string>
  122 + <reference key="NSSuperview"/>
  123 + <object class="NSColor" key="IBUIBackgroundColor">
  124 + <int key="NSColorSpace">3</int>
  125 + <bytes key="NSWhite">MQA</bytes>
  126 + <object class="NSColorSpace" key="NSCustomColorSpace">
  127 + <int key="NSID">2</int>
  128 + </object>
  129 + </object>
  130 + <object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
  131 + </object>
  132 + </object>
  133 + <object class="IBObjectContainer" key="IBDocument.Objects">
  134 + <object class="NSMutableArray" key="connectionRecords">
  135 + <bool key="EncodedWithXMLCoder">YES</bool>
  136 + <object class="IBConnectionRecord">
  137 + <object class="IBCocoaTouchOutletConnection" key="connection">
  138 + <string key="label">view</string>
  139 + <reference key="source" ref="372490531"/>
  140 + <reference key="destination" ref="191373211"/>
  141 + </object>
  142 + <int key="connectionID">3</int>
  143 + </object>
  144 + <object class="IBConnectionRecord">
  145 + <object class="IBCocoaTouchOutletConnection" key="connection">
  146 + <string key="label">imageView1</string>
  147 + <reference key="source" ref="372490531"/>
  148 + <reference key="destination" ref="512691955"/>
  149 + </object>
  150 + <int key="connectionID">15</int>
  151 + </object>
  152 + <object class="IBConnectionRecord">
  153 + <object class="IBCocoaTouchOutletConnection" key="connection">
  154 + <string key="label">imageView2</string>
  155 + <reference key="source" ref="372490531"/>
  156 + <reference key="destination" ref="393184766"/>
  157 + </object>
  158 + <int key="connectionID">16</int>
  159 + </object>
  160 + <object class="IBConnectionRecord">
  161 + <object class="IBCocoaTouchOutletConnection" key="connection">
  162 + <string key="label">imageView3</string>
  163 + <reference key="source" ref="372490531"/>
  164 + <reference key="destination" ref="496427125"/>
  165 + </object>
  166 + <int key="connectionID">17</int>
  167 + </object>
  168 + <object class="IBConnectionRecord">
  169 + <object class="IBCocoaTouchOutletConnection" key="connection">
  170 + <string key="label">progressIndicator</string>
  171 + <reference key="source" ref="372490531"/>
  172 + <reference key="destination" ref="138477738"/>
  173 + </object>
  174 + <int key="connectionID">18</int>
  175 + </object>
  176 + <object class="IBConnectionRecord">
  177 + <object class="IBCocoaTouchEventConnection" key="connection">
  178 + <string key="label">fetchThreeImages:</string>
  179 + <reference key="source" ref="963091686"/>
  180 + <reference key="destination" ref="372490531"/>
  181 + <int key="IBEventType">7</int>
  182 + </object>
  183 + <int key="connectionID">20</int>
  184 + </object>
  185 + </object>
  186 + <object class="IBMutableOrderedSet" key="objectRecords">
  187 + <object class="NSArray" key="orderedObjects">
  188 + <bool key="EncodedWithXMLCoder">YES</bool>
  189 + <object class="IBObjectRecord">
  190 + <int key="objectID">0</int>
  191 + <object class="NSArray" key="object" id="360949347">
  192 + <bool key="EncodedWithXMLCoder">YES</bool>
  193 + </object>
  194 + <reference key="children" ref="1000"/>
  195 + <nil key="parent"/>
  196 + </object>
  197 + <object class="IBObjectRecord">
  198 + <int key="objectID">1</int>
  199 + <reference key="object" ref="191373211"/>
  200 + <object class="NSMutableArray" key="children">
  201 + <bool key="EncodedWithXMLCoder">YES</bool>
  202 + <reference ref="602749642"/>
  203 + <reference ref="496427125"/>
  204 + <reference ref="393184766"/>
  205 + <reference ref="138477738"/>
  206 + <reference ref="963091686"/>
  207 + <reference ref="512691955"/>
  208 + </object>
  209 + <reference key="parent" ref="360949347"/>
  210 + </object>
  211 + <object class="IBObjectRecord">
  212 + <int key="objectID">-1</int>
  213 + <reference key="object" ref="372490531"/>
  214 + <reference key="parent" ref="360949347"/>
  215 + <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
  216 + </object>
  217 + <object class="IBObjectRecord">
  218 + <int key="objectID">-2</int>
  219 + <reference key="object" ref="263589821"/>
  220 + <reference key="parent" ref="360949347"/>
  221 + </object>
  222 + <object class="IBObjectRecord">
  223 + <int key="objectID">8</int>
  224 + <reference key="object" ref="602749642"/>
  225 + <reference key="parent" ref="191373211"/>
  226 + </object>
  227 + <object class="IBObjectRecord">
  228 + <int key="objectID">9</int>
  229 + <reference key="object" ref="963091686"/>
  230 + <reference key="parent" ref="191373211"/>
  231 + </object>
  232 + <object class="IBObjectRecord">
  233 + <int key="objectID">11</int>
  234 + <reference key="object" ref="512691955"/>
  235 + <reference key="parent" ref="191373211"/>
  236 + </object>
  237 + <object class="IBObjectRecord">
  238 + <int key="objectID">12</int>
  239 + <reference key="object" ref="496427125"/>
  240 + <reference key="parent" ref="191373211"/>
  241 + </object>
  242 + <object class="IBObjectRecord">
  243 + <int key="objectID">13</int>
  244 + <reference key="object" ref="393184766"/>
  245 + <reference key="parent" ref="191373211"/>
  246 + </object>
  247 + <object class="IBObjectRecord">
  248 + <int key="objectID">14</int>
  249 + <reference key="object" ref="138477738"/>
  250 + <reference key="parent" ref="191373211"/>
  251 + </object>
  252 + </object>
  253 + </object>
  254 + <object class="NSMutableDictionary" key="flattenedProperties">
  255 + <bool key="EncodedWithXMLCoder">YES</bool>
  256 + <object class="NSMutableArray" key="dict.sortedKeys">
  257 + <bool key="EncodedWithXMLCoder">YES</bool>
  258 + <string>-1.CustomClassName</string>
  259 + <string>-2.CustomClassName</string>
  260 + <string>1.IBEditorWindowLastContentRect</string>
  261 + <string>1.IBPluginDependency</string>
  262 + <string>11.IBPluginDependency</string>
  263 + <string>12.IBPluginDependency</string>
  264 + <string>13.IBPluginDependency</string>
  265 + <string>14.IBPluginDependency</string>
  266 + <string>8.IBPluginDependency</string>
  267 + <string>9.IBPluginDependency</string>
  268 + </object>
  269 + <object class="NSMutableArray" key="dict.values">
  270 + <bool key="EncodedWithXMLCoder">YES</bool>
  271 + <string>QueueViewController</string>
  272 + <string>UIResponder</string>
  273 + <string>{{901, 368}, {320, 480}}</string>
  274 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  275 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  276 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  277 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  278 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  279 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  280 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  281 + </object>
  282 + </object>
  283 + <object class="NSMutableDictionary" key="unlocalizedProperties">
  284 + <bool key="EncodedWithXMLCoder">YES</bool>
  285 + <object class="NSArray" key="dict.sortedKeys">
  286 + <bool key="EncodedWithXMLCoder">YES</bool>
  287 + </object>
  288 + <object class="NSMutableArray" key="dict.values">
  289 + <bool key="EncodedWithXMLCoder">YES</bool>
  290 + </object>
  291 + </object>
  292 + <nil key="activeLocalization"/>
  293 + <object class="NSMutableDictionary" key="localizations">
  294 + <bool key="EncodedWithXMLCoder">YES</bool>
  295 + <object class="NSArray" key="dict.sortedKeys">
  296 + <bool key="EncodedWithXMLCoder">YES</bool>
  297 + </object>
  298 + <object class="NSMutableArray" key="dict.values">
  299 + <bool key="EncodedWithXMLCoder">YES</bool>
  300 + </object>
  301 + </object>
  302 + <nil key="sourceID"/>
  303 + <int key="maxID">20</int>
  304 + </object>
  305 + <object class="IBClassDescriber" key="IBDocument.Classes">
  306 + <object class="NSMutableArray" key="referencedPartialClassDescriptions">
  307 + <bool key="EncodedWithXMLCoder">YES</bool>
  308 + <object class="IBPartialClassDescription">
  309 + <string key="className">QueueViewController</string>
  310 + <string key="superclassName">UIViewController</string>
  311 + <object class="NSMutableDictionary" key="actions">
  312 + <string key="NS.key.0">fetchThreeImages:</string>
  313 + <string key="NS.object.0">id</string>
  314 + </object>
  315 + <object class="NSMutableDictionary" key="outlets">
  316 + <bool key="EncodedWithXMLCoder">YES</bool>
  317 + <object class="NSMutableArray" key="dict.sortedKeys">
  318 + <bool key="EncodedWithXMLCoder">YES</bool>
  319 + <string>imageView1</string>
  320 + <string>imageView2</string>
  321 + <string>imageView3</string>
  322 + <string>progressIndicator</string>
  323 + </object>
  324 + <object class="NSMutableArray" key="dict.values">
  325 + <bool key="EncodedWithXMLCoder">YES</bool>
  326 + <string>UIImageView</string>
  327 + <string>UIImageView</string>
  328 + <string>UIImageView</string>
  329 + <string>UIProgressView</string>
  330 + </object>
  331 + </object>
  332 + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  333 + <string key="majorKey">IBProjectSource</string>
  334 + <string key="minorKey">QueueViewController.h</string>
  335 + </object>
  336 + </object>
  337 + </object>
  338 + </object>
  339 + <int key="IBDocument.localizationMode">0</int>
  340 + <string key="IBDocument.LastKnownRelativeProjectPath">../asi-http-request.xcodeproj</string>
  341 + <int key="IBDocument.defaultPropertyAccessControl">3</int>
  342 + </data>
  343 +</archive>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.02">
  3 + <data>
  4 + <int key="IBDocument.SystemTarget">528</int>
  5 + <string key="IBDocument.SystemVersion">9F33</string>
  6 + <string key="IBDocument.InterfaceBuilderVersion">672</string>
  7 + <string key="IBDocument.AppKitVersion">949.34</string>
  8 + <string key="IBDocument.HIToolboxVersion">352.00</string>
  9 + <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
  10 + <bool key="EncodedWithXMLCoder">YES</bool>
  11 + <integer value="1"/>
  12 + </object>
  13 + <object class="NSArray" key="IBDocument.PluginDependencies">
  14 + <bool key="EncodedWithXMLCoder">YES</bool>
  15 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  16 + </object>
  17 + <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
  18 + <bool key="EncodedWithXMLCoder">YES</bool>
  19 + <object class="IBProxyObject" id="372490531">
  20 + <string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
  21 + </object>
  22 + <object class="IBProxyObject" id="263589821">
  23 + <string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
  24 + </object>
  25 + <object class="IBUIView" id="191373211">
  26 + <reference key="NSNextResponder"/>
  27 + <int key="NSvFlags">274</int>
  28 + <object class="NSMutableArray" key="NSSubviews">
  29 + <bool key="EncodedWithXMLCoder">YES</bool>
  30 + <object class="IBUILabel" id="602749642">
  31 + <reference key="NSNextResponder" ref="191373211"/>
  32 + <int key="NSvFlags">292</int>
  33 + <string key="NSFrame">{{20, 20}, {280, 146}}</string>
  34 + <reference key="NSSuperview" ref="191373211"/>
  35 + <bool key="IBUIOpaque">NO</bool>
  36 + <bool key="IBUIClipsSubviews">YES</bool>
  37 + <bool key="IBUIUserInteractionEnabled">NO</bool>
  38 + <string type="base64-UTF8" key="IBUIText">RGVtb25zdHJhdGVzIGZldGNoaW5nIGEgd2ViIHBhZ2Ugc3luY2hyb25vdXNseSwgdGhlIEhUTUwgc291
  39 +cmNlIHdpbGwgYXBwZWFyIGluIHRoZSBib3ggYmVsb3cgd2hlbiB0aGUgZG93bmxvYWQgaXMgY29tcGxl
  40 +dGUuIEluIHRoaXMgZXhhbXBsZSwgaXQgd2lsbCBydW4gaW4gdGhlIG1haW4gcnVuIGxvb3AsIHNvIHRo
  41 +ZSBpbnRlcmZhY2Ugd2lsbCBsb2NrIHVudGlsIHRoZSBkb3dubG9hZCBpcyBjb21wbGV0ZS4gSW4gcmVh
  42 +bCB3b3JsZCBzaXR1YXRpb25zLCB5b3UnZCBiZSBtb3JlIGxpa2VseSB0byBydW4gdGhpcyBpbiBhIHRo
  43 +cmVhZC4</string>
  44 + <object class="NSFont" key="IBUIFont" id="467718481">
  45 + <string key="NSName">Helvetica</string>
  46 + <double key="NSSize">1.400000e+01</double>
  47 + <int key="NSfFlags">16</int>
  48 + </object>
  49 + <object class="NSColor" key="IBUITextColor">
  50 + <int key="NSColorSpace">1</int>
  51 + <bytes key="NSRGB">MCAwIDAAA</bytes>
  52 + </object>
  53 + <nil key="IBUIHighlightedColor"/>
  54 + <int key="IBUIBaselineAdjustment">1</int>
  55 + <float key="IBUIMinimumFontSize">1.000000e+01</float>
  56 + <int key="IBUINumberOfLines">0</int>
  57 + </object>
  58 + <object class="IBUIButton" id="963091686">
  59 + <reference key="NSNextResponder" ref="191373211"/>
  60 + <int key="NSvFlags">292</int>
  61 + <string key="NSFrame">{{20, 174}, {72, 37}}</string>
  62 + <reference key="NSSuperview" ref="191373211"/>
  63 + <bool key="IBUIOpaque">NO</bool>
  64 + <bool key="IBUIClearsContextBeforeDrawing">NO</bool>
  65 + <int key="IBUIContentHorizontalAlignment">0</int>
  66 + <int key="IBUIContentVerticalAlignment">0</int>
  67 + <object class="NSFont" key="IBUIFont">
  68 + <string key="NSName">Helvetica-Bold</string>
  69 + <double key="NSSize">1.500000e+01</double>
  70 + <int key="NSfFlags">16</int>
  71 + </object>
  72 + <int key="IBUIButtonType">1</int>
  73 + <string key="IBUIHighlightedTitle">Go!</string>
  74 + <string key="IBUIDisabledTitle">Go!</string>
  75 + <string key="IBUISelectedTitle">Go!</string>
  76 + <string key="IBUINormalTitle">Go!</string>
  77 + <object class="NSColor" key="IBUIHighlightedTitleColor">
  78 + <int key="NSColorSpace">1</int>
  79 + <bytes key="NSRGB">MSAxIDEAA</bytes>
  80 + </object>
  81 + <object class="NSColor" key="IBUINormalTitleColor">
  82 + <int key="NSColorSpace">1</int>
  83 + <bytes key="NSRGB">MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA</bytes>
  84 + </object>
  85 + </object>
  86 + <object class="IBUITextView" id="251778509">
  87 + <reference key="NSNextResponder" ref="191373211"/>
  88 + <int key="NSvFlags">292</int>
  89 + <string key="NSFrame">{{20, 219}, {280, 152}}</string>
  90 + <reference key="NSSuperview" ref="191373211"/>
  91 + <bool key="IBUIOpaque">NO</bool>
  92 + <bool key="IBUIClipsSubviews">YES</bool>
  93 + <bool key="IBUIMultipleTouchEnabled">YES</bool>
  94 + <bool key="IBUIShowsHorizontalScrollIndicator">NO</bool>
  95 + <int key="IBUIIndicatorStyle">1</int>
  96 + <bool key="IBUIDelaysContentTouches">NO</bool>
  97 + <bool key="IBUICanCancelContentTouches">NO</bool>
  98 + <bool key="IBUIBouncesZoom">NO</bool>
  99 + <bool key="IBUIEditable">NO</bool>
  100 + <string key="IBUIText"/>
  101 + <reference key="IBUIFont" ref="467718481"/>
  102 + </object>
  103 + </object>
  104 + <string key="NSFrameSize">{320, 460}</string>
  105 + <reference key="NSSuperview"/>
  106 + <object class="NSColor" key="IBUIBackgroundColor">
  107 + <int key="NSColorSpace">3</int>
  108 + <bytes key="NSWhite">MQA</bytes>
  109 + <object class="NSColorSpace" key="NSCustomColorSpace">
  110 + <int key="NSID">2</int>
  111 + </object>
  112 + </object>
  113 + <object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
  114 + </object>
  115 + </object>
  116 + <object class="IBObjectContainer" key="IBDocument.Objects">
  117 + <object class="NSMutableArray" key="connectionRecords">
  118 + <bool key="EncodedWithXMLCoder">YES</bool>
  119 + <object class="IBConnectionRecord">
  120 + <object class="IBCocoaTouchOutletConnection" key="connection">
  121 + <string key="label">view</string>
  122 + <reference key="source" ref="372490531"/>
  123 + <reference key="destination" ref="191373211"/>
  124 + </object>
  125 + <int key="connectionID">3</int>
  126 + </object>
  127 + <object class="IBConnectionRecord">
  128 + <object class="IBCocoaTouchEventConnection" key="connection">
  129 + <string key="label">simpleURLFetch:</string>
  130 + <reference key="source" ref="963091686"/>
  131 + <reference key="destination" ref="372490531"/>
  132 + <int key="IBEventType">7</int>
  133 + </object>
  134 + <int key="connectionID">12</int>
  135 + </object>
  136 + <object class="IBConnectionRecord">
  137 + <object class="IBCocoaTouchOutletConnection" key="connection">
  138 + <string key="label">htmlSource</string>
  139 + <reference key="source" ref="372490531"/>
  140 + <reference key="destination" ref="251778509"/>
  141 + </object>
  142 + <int key="connectionID">13</int>
  143 + </object>
  144 + </object>
  145 + <object class="IBMutableOrderedSet" key="objectRecords">
  146 + <object class="NSArray" key="orderedObjects">
  147 + <bool key="EncodedWithXMLCoder">YES</bool>
  148 + <object class="IBObjectRecord">
  149 + <int key="objectID">0</int>
  150 + <object class="NSArray" key="object" id="360949347">
  151 + <bool key="EncodedWithXMLCoder">YES</bool>
  152 + </object>
  153 + <reference key="children" ref="1000"/>
  154 + <nil key="parent"/>
  155 + </object>
  156 + <object class="IBObjectRecord">
  157 + <int key="objectID">1</int>
  158 + <reference key="object" ref="191373211"/>
  159 + <object class="NSMutableArray" key="children">
  160 + <bool key="EncodedWithXMLCoder">YES</bool>
  161 + <reference ref="602749642"/>
  162 + <reference ref="251778509"/>
  163 + <reference ref="963091686"/>
  164 + </object>
  165 + <reference key="parent" ref="360949347"/>
  166 + </object>
  167 + <object class="IBObjectRecord">
  168 + <int key="objectID">-1</int>
  169 + <reference key="object" ref="372490531"/>
  170 + <reference key="parent" ref="360949347"/>
  171 + <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
  172 + </object>
  173 + <object class="IBObjectRecord">
  174 + <int key="objectID">-2</int>
  175 + <reference key="object" ref="263589821"/>
  176 + <reference key="parent" ref="360949347"/>
  177 + </object>
  178 + <object class="IBObjectRecord">
  179 + <int key="objectID">8</int>
  180 + <reference key="object" ref="602749642"/>
  181 + <reference key="parent" ref="191373211"/>
  182 + </object>
  183 + <object class="IBObjectRecord">
  184 + <int key="objectID">9</int>
  185 + <reference key="object" ref="963091686"/>
  186 + <reference key="parent" ref="191373211"/>
  187 + </object>
  188 + <object class="IBObjectRecord">
  189 + <int key="objectID">10</int>
  190 + <reference key="object" ref="251778509"/>
  191 + <reference key="parent" ref="191373211"/>
  192 + </object>
  193 + </object>
  194 + </object>
  195 + <object class="NSMutableDictionary" key="flattenedProperties">
  196 + <bool key="EncodedWithXMLCoder">YES</bool>
  197 + <object class="NSMutableArray" key="dict.sortedKeys">
  198 + <bool key="EncodedWithXMLCoder">YES</bool>
  199 + <string>-1.CustomClassName</string>
  200 + <string>-2.CustomClassName</string>
  201 + <string>1.IBEditorWindowLastContentRect</string>
  202 + <string>1.IBPluginDependency</string>
  203 + <string>10.IBPluginDependency</string>
  204 + <string>8.IBPluginDependency</string>
  205 + <string>9.IBPluginDependency</string>
  206 + </object>
  207 + <object class="NSMutableArray" key="dict.values">
  208 + <bool key="EncodedWithXMLCoder">YES</bool>
  209 + <string>SynchronousViewController</string>
  210 + <string>UIResponder</string>
  211 + <string>{{714, 372}, {320, 480}}</string>
  212 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  213 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  214 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  215 + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  216 + </object>
  217 + </object>
  218 + <object class="NSMutableDictionary" key="unlocalizedProperties">
  219 + <bool key="EncodedWithXMLCoder">YES</bool>
  220 + <object class="NSArray" key="dict.sortedKeys">
  221 + <bool key="EncodedWithXMLCoder">YES</bool>
  222 + </object>
  223 + <object class="NSMutableArray" key="dict.values">
  224 + <bool key="EncodedWithXMLCoder">YES</bool>
  225 + </object>
  226 + </object>
  227 + <nil key="activeLocalization"/>
  228 + <object class="NSMutableDictionary" key="localizations">
  229 + <bool key="EncodedWithXMLCoder">YES</bool>
  230 + <object class="NSArray" key="dict.sortedKeys">
  231 + <bool key="EncodedWithXMLCoder">YES</bool>
  232 + </object>
  233 + <object class="NSMutableArray" key="dict.values">
  234 + <bool key="EncodedWithXMLCoder">YES</bool>
  235 + </object>
  236 + </object>
  237 + <nil key="sourceID"/>
  238 + <int key="maxID">13</int>
  239 + </object>
  240 + <object class="IBClassDescriber" key="IBDocument.Classes">
  241 + <object class="NSMutableArray" key="referencedPartialClassDescriptions">
  242 + <bool key="EncodedWithXMLCoder">YES</bool>
  243 + <object class="IBPartialClassDescription">
  244 + <string key="className">SynchronousViewController</string>
  245 + <string key="superclassName">UIViewController</string>
  246 + <object class="NSMutableDictionary" key="actions">
  247 + <string key="NS.key.0">simpleURLFetch:</string>
  248 + <string key="NS.object.0">id</string>
  249 + </object>
  250 + <object class="NSMutableDictionary" key="outlets">
  251 + <string key="NS.key.0">htmlSource</string>
  252 + <string key="NS.object.0">UITextView</string>
  253 + </object>
  254 + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  255 + <string key="majorKey">IBProjectSource</string>
  256 + <string key="minorKey">SynchronousViewController.h</string>
  257 + </object>
  258 + </object>
  259 + </object>
  260 + </object>
  261 + <int key="IBDocument.localizationMode">0</int>
  262 + <string key="IBDocument.LastKnownRelativeProjectPath">../asi-http-request.xcodeproj</string>
  263 + <int key="IBDocument.defaultPropertyAccessControl">3</int>
  264 + </data>
  265 +</archive>