だから私は次のコードを持っている:ここでブロック内に変数を割り当てるには弱い参照が必要ですか?
[serviceHandler getHomeConfigurationData:^(NSDictionary *data){
if (data) {
NSLog(@"The Data: %@", data);
homeConfigData = data;
}
} failure:^(NSError *error, BaseServiceHandler *context){
homeConfigData = Nil;
NSLog(@"Error: %@", error);
}];
を、homeConfigData
は私のViewControllerでのインスタンス変数です。このメソッド全体はバックグラウンドスレッドで行われます。補完ブロックが返される/起動されると、ViewControllerが割り当て解除される可能性があります。だから私は私が行をするときに問題を起こすか心配ですhomeConfigData = data;
私はこれをどうやって処理しますか?このよう
weakSelfがnilになると、Nil = dataとなります。これはクラッシュを引き起こすだろうか? また、私はこれを行うべきであると仮定して正しいですか? また、 "homeConfigData"がインスタンス変数であるためweakSelf.homeConfigDataを実行できません – user1416564
私はあなたの懸念事項に従っていません。 'weakSelf'はインスタンスへのポインタでなければならないので、インスタンス変数を使うべきではありません。 'data'はnilではありませんが、weakSelf.homeConfigData = data'は' weakSelf'がnilになるので何もしません。さらに問題がある場合は、コードを投稿してください。 –
さて、もう一度お試しください。 'homeConfigData'はプライベート変数です。つまり、 'self.homeConfigData'を実行することはできません。それはコンパイルされません。とにかく、私は解決策を見つけ出し、前に '__block'を使って' homeConfigData'を宣言しました。 – user1416564