最初に webservice を呼び出してから、テーブル ビューを生成したかったのですが、これを達成する方法を教えてください。
2 に答える
これを機能させるには、次のことができます。
最初に、次のように、Web サービスから受け取るデータを保持するプロパティをビュー コントローラー内に作成します。
@property (strong,nonatomic) NSMutabledata *theData;
次に、実装ファイルで合成します。
@synthesize theData = _theData;
次に、実際に Web サービスからデータをロードする NSURLConnection を設定する必要があります。
NSURL *theURL = [NSURL urlWithString:@"http://thisisyourwebservice.com/somethinghere"];
NSURLRequest *theRequest = [NSURLRequest requestWithURL:theURL];
NSURLConnection *connection = [NSURLConnection connectionWithRequest:theRequest delegate:self];
これは、viewDidLoad メソッド内、またはカスタム セットアップ メソッド内で設定できます。誰かがビューを閉じたときのように、この接続をキャンセル可能にしたい場合は、データに対して行うのと同じようにプロパティを追加する必要があります。
これまでのところ、接続が作成され、指定された URL からデータのダウンロードが自動的に開始されます。しかし、NSURLConnectionDataDelegate プロトコルをまだ実装していないため、現時点ではデータはどこにも行きません。これは次のように行います。
ヘッダー ファイル内で、次のような操作を行います。
@implementation YourViewControllerClass : UIViewController <NSURLConnectionDataDelegate>
ここで、viewcontroller 内にいくつかのデリゲート メソッドを実装する必要があります。これにより、実際にデータを受け取り、後で使用できるように保存できます。それらは次のとおりです。
/* you received a response, so now initialize the NSMutableData object */
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
/* this should work in ARC, without ARC you would have to add autorelease after init, else you will have a leak */
self.theData = [NSMutableData alloc] init];
}
/* here you will actually receive data */
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.theData appendData:data];
}
/* now your connection has finished loading */
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
/* depending on what you are loading, you need to convert your data into an object
you of your choice. if you loaded JSON, then use one of the JSONparsers like
SBJSON, JSONKit or the NSJSONSerialization class available since iOS 5.0.
After converting your data to the expected object type you will assign it to the
property which you are using as datasource for your tableView.
*/
}
接続がロードされた後、実際にはビューコントローラー内に目的のデータを持つプロパティが必要です。を使用して tableView をリロードするだけで、準備完了[yourTableView reloadeData]
です。
Web サービスを呼び出し、ロードが終了したら、応答されたオブジェクトを配列に入れ、サービスが呼び出された場所からクラスに戻し、オブジェクト配列をデータ ソース配列に置き換えて [tablview reloadData] を呼び出します。