シナリオ
parse.com データベースからデータをダウンロードして PFQueryTableViewController に表示するアプリがあります。PFQTVC には複数 (6) のプロトタイプ セルがあり、それぞれに独自の reuseIdentifier と、最も重要な高さがあります。私は現在、次のデザインを使用して、それぞれの正しい高さを見つけていますindexPath.row
...
現在
これは、ページングを有効にする前に機能します
各セルは、それぞれが異なる種類の情報を表示するため、一意です。だから私はself.objects
彼らが持っているそれぞれのユニークな品質によってそれぞれをチェックしています.
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
// \!/ -trouble maker
PFObject *object = [self.objects objectAtIndex:indexPath.row];
NSString *orientation = object[@"orientation"];
NSNumber *height;
if ([orientation isEqual: @"left"] || [orientation isEqual: @"right"]) {
height = @400.0;
}
else if ([orientation isEqual: @"up"] || [orientation isEqual: @"down"]) {
height = @500.0;
}
else if (blah blah blah) {
//ect.
}
return [height floatValue];
}
これはすべて機能します。つまり、ページングを有効にする前です。
ページングを有効にすると
ほとんどのアプリと同様に、私のものはデータをページングできる必要があり、それが私のものです。私objectsPerPage
は10に設定しました-問題は、その10番目のセルまでスクロールして次のページをリロードすると...
...reason: '*** -[__NSArrayM objectAtIndex:]: index 11 beyond bounds [0 .. 10]'
理由
次のページをロードするときself.objects
、heightForRowAtIndexPath には、新しいオブジェクトがロードされない NSArray があります。これによりアプリがクラッシュし、非常にイライラしています。
質問
この問題を解決する方法を知っている人はいますか?
編集
NSNumber *height;
if (indexPath.row > self.objects.count) {
height = @50.0;
}
else {
PFObject *object = [self.objects objectAtIndex:indexPath.row];
NSString *orientation = object[@"orientation"];
if ([orientation isEqual: @"left"] || [orientation isEqual: @"right"]) {
//HAS COMMENTS
if ([[object objectForKey:@"comments"]intValue] > 0) {
height = @618.0;
}
else {
//NO COMMENTS BUT HAS LIKES
if ([[object objectForKey:@"likes"]count] > 0) {
height = @398.0;
}
//HAS NOTHING
else {
height = @381.0;
}
}
}
else if ([orientation isEqual: @"up"] || [orientation isEqual: @"down"]) {
if ([[object objectForKey:@"comments"]intValue] > 0) {
height = @727.0;
}
else {
if ([[object objectForKey:@"likes"]count] > 0) {
height = @508.0;
}
else {
height = @490.0;
}
}
}
return [height floatValue];
}