3

Ok。そこで、初めての iPhone アプリのプロトタイプを作成しました。このアプリは、特定の XML ファイルを解析します。このファイルは、テスト目的でアプリを構成する他のすべてのファイルに含まれていますが、最終的には、アプリが Web サービスから XML データを取得するようにしたいと考えています。

そこで、データを読み取って XML ファイルを作成する PHP スクリプトを作成しました。しかし、Web サーバーから電話に XML ファイルを取得するにはどうすればよいでしょうか。

これは私が持っているものです:

  1. URL 経由でアクセスできる XML ファイル - つまり //localhost/v/p.xml
  2. 現在アプリにロードされている XML ファイルを解析できる iOS 6 アプリ (XCode プロジェクトの Supporting Files フォルダーの下に配置)。

では、XML ファイルを電話に送る最良の方法は何でしょうか? LazyTableImages は私が見るべきものですか?

私はこれを行う必要があります:

NSURL *url = [[NSURL alloc] initFileURLWithPath:@"http://localhost/v/p.xml"];
NSData *xmlData = [[NSData alloc] initWithContentsOfURL:url];

//NSString *path = [[NSBundle mainBundle] pathForResource:@"profileXML" ofType:@"xml"];
//NSData *xmlData = [[NSData alloc] initWithContentsOfFile:path];

コメントアウトされた行を先頭の 2 行のどこに置き換えますか? そんなに簡単ですか?

4

2 に答える 2

2

stringWithContentsOfURL:encoding:error:ここに記載されているを使用できます。

http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html

例えば:

[NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://localhost/v/p.xml"] encoding:NSUTF8StringEncoding error:nil];

アップデート:

Jim が言うように、NSURLConnectionは非ブロッキングであり、ファイルをパブリック アクセスから保護したい場合は資格情報を送信できます。それを使用する場合は、次のようになります。

NSString *authenticationURL = @"http://foo.bar";
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:authenticationURL]];
NSString *escUsername = [username stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *escPassword = [password stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

[request setHTTPMethod: @"POST"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
[request setHTTPBody:[[NSString stringWithFormat:@"username=%@&password=%@", escUsername, escPassword] dataUsingEncoding:NSUTF8StringEncoding]];

NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

#pragma mark Url connection delegate methods

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    NSString *responseText = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"%@", responseText);  
}
于 2012-12-07T19:11:40.757 に答える
0

あなたの例は期待どおりに動作するはずですが(1)、2行目でアプリがしばらくフリーズします。このメソッドはファイルを同期的にダウンロードしますが、これは通常望ましくありません (バックグラウンド キューで実行しない限り)。

私は使用します+[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]。これは、何かをダウンロードする最も簡単な非同期方法です。

例:

NSURL *url = [NSURL URLWithString:@"http://localhost/v/p.xml"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request
                                   queue:[NSOperationQueue mainQueue]
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                                              // Do something with the `data` unless you have `error`.
                                          }];

(1)あなたが を構築する方法がよくわかりませんNSURL。と書かれてinitFileURLWithPathいますが、そこにパスを渡していないことは間違いありません。

于 2012-12-07T21:01:44.033 に答える