私は Web API を使用したことがなく、これについて何を読むことができるかわかりません。FAROO Return Values doc を読みましたが、cocoa で結果配列 (または辞書) を取得する方法がわかりません。Objective-C で Faroo API (または他の Web API) を使用する方法の例またはチュートリアルを誰か教えてください。
ありがとうございました。
私は Web API を使用したことがなく、これについて何を読むことができるかわかりません。FAROO Return Values doc を読みましたが、cocoa で結果配列 (または辞書) を取得する方法がわかりません。Objective-C で Faroo API (または他の Web API) を使用する方法の例またはチュートリアルを誰か教えてください。
ありがとうございました。
特に Web API と FAROO API を使用するには、NSURLConnection
クラスとNSURLConnectionDelegate
プロトコルを使用します。
- (IBAction)search:(id)sender {
NSString* requestString = [NSString stringWithFormat:@"http://www.faroo.com/api?q=%@&start=1&length=10&l=ru&src=news&f=xml&YOUR_API_KEY",[searchField stringValue]];
// NSLog(@"str %@",requestString);
NSURL* requestUrl = [NSURL URLWithString:requestString];
NSURLRequest* searchRequest = [NSURLRequest requestWithURL:requestUrl cachePolicy:NSURLRequestReloadRevalidatingCacheData timeoutInterval:60];
[self performSelectorOnMainThread:@selector(startConnectionWithRequest:) withObject:searchRequest waitUntilDone:NO];
}
- (void)startConnectionWithRequest:(NSURLRequest*)request {
NSURLConnection* connection = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES];
if (connection) {
//update GUI and do something...
theData = [NSMutableData data];
}
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
NSLog(@"Receive data");
[theData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
NSLog(@"Http status code %ld",(long)[httpResponse statusCode]);
}
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSLog(@"Finish");
//do something with data and update GUI
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
NSAlert* searchFailedAlert = [NSAlert alertWithError:error];
[searchFailedAlert runModal];
}
もう 1 つの方法は、不足しているメソッドを問題のクラスのカテゴリとして自分で宣言することです。これにより、コンパイラはメソッドが見つからないという不平を言うのをやめますが、もちろん、実際にメソッドを呼び出さないようにするために、既に実行しているランタイム チェックが必要になります。また、10.5/10.6 SDK を使用するようになったときに無視されるように、可用性マクロを使用してそのような宣言をラップすることもできます。これにより、後で別のコンパイラの苦情が発生することはありません。それは次のようになります。
#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_4 //ignore when compiling with the 10.5 SDK or higher
@interface NSPropertyListSerialization(MissingMethods)
+ (NSData *)dataWithPropertyList:(id)plist format:(NSPropertyListFormat)format options:(NSPropertyListWriteOptions)opt error:(NSError **)error;
@end
#endif