リフレッシュするためのプルに非常に奇妙なバグがあります。テーブルのデータを更新する関数があります。pull to refreshとonの両方で呼び出されviewWillAppear
ます。この同じ機能は後者では問題なく機能しますが、プルして更新するとクラッシュします。ここに私の「リセット」機能があります
-(void)reset{
refreshList = nil;
isFiltered = NO;
currentRoom = nil;
[roomList removeAllObjects];
NSMutableURLRequest *newRequest=[NSMutableURLRequest requestWithURL:
[NSURL URLWithString:@"http://192.168.1.128:8080/DJService/room/list/"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
[newRequest setHTTPMethod:@"POST"];
refreshList = [[NSURLConnection alloc] initWithRequest:newRequest
delegate:self];
}
ここで、pull to refresh を実行すると、次のようになります。関数に直行し、次のcellForRowAtIndexPath
行でクラッシュします。
room = [roomList objectAtIndex:indexPath.row];
roomList
が空で、まだ入力されていないため、クラッシュしています。私が理解していないのは、reloadData
まだ呼び出されていないときになぜこの関数に行くのかということです。上記のコードから、新しいデータを取得するために url 接続が作成され、テーブルが再ロードされるはずですが、connectionDidFinishLoading
その関数は呼び出されません。実際、テーブルまたは URL 接続の他のデリゲート関数は呼び出されません。それはまっすぐに行きcellForRowAtIndexPath
、空のリストを読み込もうとします....なぜこれをやっているのですか?
これとまったく同じ関数 ( reset
) が呼び出されviewWillAppear
、正常に動作します。
さらにややこしいのは、テーブルに 7 つ以上の要素がある (画面がいっぱいになっている) 場合にのみ、このクラッシュが発生することです。