1

1つの問題があります。AとBがAユーザーからBビューコントローラーへの2つのビューコントローラーであると仮定します。Bでは、ユーザーはオブジェクトC(NSObjectクラス)を作成してダウンロードを開始し、BをC(割り当て)へのデリゲートとして設定します。ユーザーがAに戻り、Bのダウンロードがオブジェクトを解放し、Cデリゲートがコールバックを返すことができない(クラッシュ)。コールを取得して、ユーザーが他のView Controllerに移動できるようにしたいのですが、Cクラスでデリゲートを保持していますがデリゲートの保持が間違っています...

what are all solutions ...

前もって感謝します。

4

2 に答える 2

0

I see two options:

  1. You do not need the downloaded data. Solution: set the delegate to nil.
  2. You need the data. Solution: You either set a new delegate that exists, or the delegate should make sure it will be around (f.e. by being a singleton)
于 2015-05-18T12:00:43.947 に答える
0

これは、アーキテクチャの問題が原因で発生します。メモリ内にある場合とない場合があるView Controllerにバックグラウンドダウンロードのグローバルタスクを割り当てています。

B の存在に関係なくダウンロードを続行できるようにする場合は、次のようにします。

  1. ファイルのダウンロードを処理するクラス「ダウンローダー」を作成します(例ではCと呼んでいると思います)。
  2. このようなクラスには、元のデリゲートがなくなってもアプリがクラッシュしないように、"weak" 型のデリゲートが必要です (注: これは、ARC を使用している場合にのみ使用できます)。ダウンロードの進行状況をグローバルに監視する必要がある場合はNSNotification、デリゲートの代わりに切り替えて、複数のオブジェクトが同時に監視できるようにします。
  3. C のインスタンスを別の場所 (A またはその前) で初期化します。
  4. C のインスタンスを B に注入して、カスタムinitメソッドまたは@property.
于 2015-05-18T12:04:31.233 に答える