-2

ネットワークから来たNSDataに基づいてオブジェクトを初期化したい。

非同期データに基づいてオブジェクトを構築することはできますが、それが完了するまで待ってから次のコマンドに進む方法を考えています。

ヒントやキーワードを教えてもらえますか?

ObjWithApi* aObj = [[ObjWithApi alloc]initWithUrl:url];
if(aObj){
    aLabel.text = aObj.title;
}

OK、たくさんの人がこの質問に疑問を投げかけました。しかし、私は今、私自身の答えを持っています。質問自体は間違っています。私が必要としているのは「データが入力された後に何かをする」でした。つまり、ブロックで十分です。次のように並べ替えます

[obj getData:^(NSArray* data) {
   make data object by data.
}

この質問を振り返ると、次のようになります

@interface someRemoteDataModel 
@implement someRemoteDataModel 
+(void)getData:(NSURL*)url andDoSomething:(void(^)(NSArray* data))block {
    block(data);
}
@end

その後

[someRemoteDataModel getData:aURL andDoSomething:(^ NSArray *data){
  // fill data object and update UI

}];

そして、誰かがこれを読んだら、あなたのアイデアを合理的な方法に変換して、あなた自身の答えを見つけてください。

4

1 に答える 1

0

AFNetworkingまたは NSURLConnectionを使用することをお勧めします

NSURL接続

NSURLConnectionDelegateクラスはand/or を実装する必要がありNSURLConnectionDataDelegateます。

リクエスト送信

// Create the POST request to the server.
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"url"];
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[conn start];

*このデータ受信 *

#pragma mark - NSURLConnectionDataDelegate method/s
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    _myData = [data copy];
    // at this moment you can freely access `_myData` but remember to release it when it is needed
}

#pragma mark - NSURLConnectionDelegate method/s
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
{
    // this method will be called if the url connection failed.
}
于 2013-03-06T10:02:13.583 に答える