いつもお世話になっております。
表題の件ですが、xmlparseでサーバーからデータを取得し、そのデータをUITableViewに表示していく処理を実装しているのですが、新しいデータを取得しし、[listtable reloadData];(listtableというのはUITableViewをヘッダファイルに定義した時に自分でつけた名前)をしてもnumberOfRowsInSectionまでしか実行しません...。
現在の状況としましては、
1, numberOfRowsInSectionは0ではなく、新しく更新して表示したいデータの数を返している。
2,サーバからデータをxmlparseで取得する際にサーバから通知がきてイベントがか発生し、関数が呼ばれるのですがこの関数内でNSThread.currentThread.isMainThread?でログを取得したところ、結果はNOでした。
このイベントが発生して呼ばれる関数内でxmlparseをして[listtable reloadData];をしようとすると更新がされません...
なお、xmlparseをしている関数もNSThread.currentThread.isMainThread?でログを確認するとNOでした。
reloadDataを行っている関数は6の方法で行っているのでメインスレッドで行われていると思っています...
3,UIButtonでボタンを生成し、ボタンを押したらxmlparseでデータを取得し[listtable reloadData];という流れで処理を行うと問題なく更新される。
NSThread.currentThread.isMainThread?でログを確認するとYESだった。
4,UITableViewはloadviewで生成してaddsubviewをしている。
viewdidload,viewwillappearで生成しても結果は変わりませんでした...
5,ボタンを押した時のパターンでlisttableの中身をログで確認してみると、nullではなくイベントが発生してのパターンでログを確認したところ、listtableの中身はnullだった。nullの時にUITableviewを生成するという処理を行ってもnullではなくなるのですが,問題の解決には至りませんでした...
6,[listtable reloadData];はメインスレッドで行うようにしている。
*試してたやり方としては下記の通りです。
objective
1 2[listtable reloadData]; 3 4[listtable performSelectorOnMainThread:@selector(reloadData)withObject:nil waitUntilDone:NO]; 5 6dispatch_async(dispatch_get_main_queue(), ^{ 7 [listtable reloadData]; 8}); 9 dispatch_async(dispatch_get_main_queue(), ^{ 10 [listtable reloadData]; 11}); 12
わかりづらくて申し訳ないのですが、
この条件を元に、考えられる解決策を教えていただけると幸いです。
よろしくお願いいたします。
回答4件
あなたの回答
tips
プレビュー