1

現在、iOSアプリのデータモデルについて考えています。アプリはサーバーからの情報のみを受信するため、「モデル」自体が通常すべてのWebリクエストを実行します...
ただし、これらのネットワークリクエストはバックグラウンドで実行する必要があります。つまり、iOSのバックグラウンドではなく、別のタスクを意味します。状態-リクエストが終了した後、アプリケーションの情報を更新する必要があります。

コントローラに通知するデリゲートを作成する方が理にかなっていますか、それともNSNotificationCenterを使用できますか?NSNotificationベースのソリューションは、たとえばデスクトップアプリケーションで、モデルをより普遍的にすることができると思います。
そして多分、私は追加する必要があります:モデル(それはいくつかのセッション情報を保存するので)はシングルトンなので、通常のデリゲートベースの方法は機能しません...

4

2 に答える 2

1

別のスレッドを使用して通信を処理するのは良い考えではないと思います。複雑であることは別として、NSURLConnection/NSURLRequest通信を非同期的に、つまりブロックせずに処理できるため、必要ありません。

詳細には、以下を実行するNSURLRequestを作成できます。

NSURLRequest* yourReq = [NSURLRequest requestWithURL:yourURL];

次に、次のコマンドでNSURLConnectionを作成します。

NSURLConnection* yourConnection = [NSURLConnection connectionWithRequest:yourReq delegate:yourDelegate];

そしてそれを次のように始めます:

[yourConnection start];

データの準備が整うと、UIを更新できるように、デリゲートのメソッドの1つ(、、connectionDidFinishLoading:または)が呼び出されます。connection:didFailWithError:

これはすべてブロックせずに。

を使用するよりも優れた代替手段は、 ASIHTTPRequestNSURLConnection/NSURLRequestを使用することです。これは、メモリ管理に関してより回復力があり、優れたキャッシュメカニズムも提供します。

編集:あなたの懸念があなたのモデルがシングルトンであるということであるならば、あなたは代理人を持つことができません、あなたが問題をさらに調べることを提案させてください。

モデルはシングルトンである可能性があり、リクエストのデリゲートは、モデルにアクセスする方法を知っていることを除けば、モデルとは何の関係もない場合があります(モデルがシングルトンであることは非常に簡単です)。

これは、を使用したいくつかのメカニズムで可能NSURLConnectionですが、を使用すると、それぞれが独自のデリゲートを持つことができるASIHTTPRequestため、非常に簡単になります。ASIHTTRequest

于 2011-05-26T15:27:42.133 に答える
0

デリゲートソリューションは機能するため、推奨されます。次のようになります。

[[DataLayer sharedInstance] fetchDataWithDelegate:self];

このメソッドは、バックグラウンドスレッドを生成し、メインスレッドのデリゲートに応答できます。

于 2011-05-26T15:03:23.640 に答える