2012-02-29 40 views
3

我正在開發一款應用程序,使用XCode 4.2以最低iOS4爲目標。以前從未做過,這是我開發iPhone應用程序的第一個月。用於連接REST API的NSUrlConnection - 針對iOS4和iOS的XCode 4.2

我做了一些研究,並且發現了ASIHTTPRequest - 這是不被維護的,甚至開發者建議使用別的東西:http://allseeing-i.com/%5Brequest_release%5D;

從那個列表中,我想爲什麼不使用NSUrlConnection,因爲它是在XCode中構建的。我知道RESTKit在那裏似乎非常流行,但我聽說設置起來有點麻煩 - 我不需要任何東西,只需連接到返回JSON的REST API服務,所以我有一種感覺,NSURLConnection已經足夠了。

不太清楚該怎麼做,尤其是因爲我的目標是iOS4和iOS5,並且從我瞭解的內容來看,iOS 5 SDK引入了NSURLConnectionDelegate(不知道它們有多不同)。

我以前在關注這篇文章https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html。但是我有一些疑問,因爲它清楚地表明:MAC OSX Developer Library不是iOS開發者庫。

任何人都可以指向正確的方向嗎?任何示例或教程?

+0

只是一個附加的註釋,但iOS版5也會引發本機JSON解析,這真的很有幫助。 – Joshua 2012-03-06 03:45:14

回答

5

我發現了類似上面的文章,但對於iOS Developer Library(不是MAX OSX之一),它們都非常相似(或者可能具有相同的內容)。 https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html#//apple_ref/doc/uid/20001836-BAJEAIEE這就是我在最後做的,而不是實現NSURLConnectionDelegate。

結合本教程中的JSONKit:http://www.techtraits.com/jsonkit/爲我完成這項工作。

謹慎的一句話:我必須關閉ARC,因爲JSONKit目前不支持它。

例子:

- (IBAction)callRest:(id)sender { 
    NSURL *url = [NSURL URLWithString:@"http://www.example.com/Person/123"]; 
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];         
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self]; 

    if(connection) { 
     responseData = [[NSMutableData alloc] init]; 
    } else { 
     NSLog(@"connection failed"); 
    } 

} 

- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    [responseData setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    [responseData appendData:data]; 
    JSONDecoder *decoder = [[JSONDecoder alloc] initWithParseOptions:JKParseOptionNone]; 
    NSDictionary* json = [decoder objectWithData:responseData]; 
    if(json != nil) 
    { 
     NSLog(@"First Name %@", [json objectForKey:@"FirstName"]); 
     NSLog(@"Last Name %@", [json objectForKey:@"LastName"]); 
    } 
} 

- (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    [connection release]; 

    [responseData release]; 

    NSLog(@"connection error"); 
} 

- (void) connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSLog(@"connection success"); 
} 

我也有申報responseData像.h文件中

@property (retain, nonatomic) NSMutableData *responseData; 

而且在.m文件如下:

@synthesize responseData;