2017-08-10 11 views
1

NSNotificationセンターを使用して通貨の変更を検出するので、他のすべてのクラスを更新できます。通貨の変更が発生すると、他のすべてのクラスとビューが更新されますが、通貨の変更がない場合は、戻るボタンを押してホームページに戻ると、既存のビューの上にビューが読み込まれます。 NSNotificationセンターのObjective-C - 別のコントローラの上にロードされるUIViewController

コードホームページで更新されたデータを処理するための

if ([overviewModel.currency isEqual:@"GBP"]){ 
       [[NSNotificationCenter defaultCenter] postNotificationName:@"DataUpdated" 
                    object:self]; 
      } else { 

       [[NSNotificationCenter defaultCenter] postNotificationName:@"DataUpdated" 
                    object:self]; 
      } 

コード:

for (UIView *b in self.view.subviews) { 
    [b removeFromSuperview]; 
} 


self.build = [[ApiRequestBuild alloc]initWithVersionKey:kAPI_VERSION_KEY requestType:kAPI_REQUEST_TYPE data:@""]; 
[self.build setQueryWithSection:@"homepage" value:@"" parameter:@[]]; 

self.request = [[ApiRequest alloc]init]; 
self.request.delegate = self; 
[self.request sendRequestWithParams:[self.build buildConfig] toUrl:kAPI_URL_STRING]; 
なぜこれが起こっている私が知っている

、要求はページが読み込まれて再び送られます既存のページの上に、私が理解していないのは、なぜサブビューコードからの削除がビューを取り除かず、どうすればこの問題を解決できるかということです。ありがとう

+0

これを試してみましたか? - https://stackoverflow.com/a/11889296/3548469 –

+0

@Dev_Tandelはい、まだ同じ問題です。グローバル変数を作成し、それをnilに設定し、通貨が変更された場合にのみ値を追加して、ホームページが更新される唯一の時間になるようにします。 –

+0

なぜサブビューを削除したいのですか?通貨が変更されたときにすべてを更新する必要があります。 –

答えて

0

removeFromSuperviewは、(メインスレッド以外の)別のスレッドから呼び出されていると動作しません。あなたの通知は、それが発砲されたのと同じスレッドで受け取られます。別のスレッドでモデル変更イベント(通貨の状態に関する)を聞いていることを私は賭けるでしょう。

サブビューのコピーを歩いてすべてを削除する前に、メインキューにディスパッチしてみてください。

+0

サブビューをコピーする前にメインキューにディスパッチすることはどういう意味ですか?どうぞよろしくお願いします。ありがとう –

+0

dispatch_async(dispatch_get_main_queue()、^ { [removeFromSuperview]; });このようなもの? –

+0

@TahaAminiよ! – Smartcat

関連する問題