Ios Xcode:从heightForCellAtIndexPath中的NSMutableArray返回浮点
场景=我有一个PFQueryTableViewController,根据查询返回的值,每个indexPath需要不同大小的单元格。如果图像为“横向尺寸”,则为一种尺寸,如果图像为“纵向尺寸”,则为另一种尺寸 1) 我在.h文件中创建了一个NSMutableArray来保存大小Ios Xcode:从heightForCellAtIndexPath中的NSMutableArray返回浮点,ios,objective-c,uitableview,parse-platform,Ios,Objective C,Uitableview,Parse Platform,场景=我有一个PFQueryTableViewController,根据查询返回的值,每个indexPath需要不同大小的单元格。如果图像为“横向尺寸”,则为一种尺寸,如果图像为“纵向尺寸”,则为另一种尺寸 1) 我在.h文件中创建了一个NSMutableArray来保存大小 @property (strong, nonatomic) NSMutableArray *rowHeightArray; 2) 对于每个对象,我检查cellForRowAtIndexPath中的值并将其添加到数组中 i
@property (strong, nonatomic) NSMutableArray *rowHeightArray;
2) 对于每个对象,我检查cellForRowAtIndexPath中的值并将其添加到数组中
if ([object[@"orientation"] isEqual:@"left"] || [object[@"orientation"] isEqual:@"right"]) {
[rowHeightArray addObject:[NSNumber numberWithFloat:378]];
}
else {
[rowHeightArray addObject:[NSNumber numberWithFloat:488]];
}
(不止这两种可能性,但我认为这足以说明问题)
问题
3) 现在我需要将正确的高度放置到正确的单元格。问题是当我尝试
return self.rowHeightArray[indexPath.row];
在heightForRowAtIndexPath中,它对我“大叫”:
returning 'id' from a function with an incompatible result type 'CGFloat' (aka 'float')
或者我也试过了
return [self.rowHeightArray[indexPath.row]floatValue]
这会停止对我“大喊大叫”,但当我尝试运行时,它会出错:
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array'
问题=我如何完成我在这里试图做的事情并让它“工作”?两个问题:
heightforrowatinexpath:
在cellforrowatinexpath:
之前调用。因此,您当前的方法计算高度太晚了。您需要在heightforrowtaindexpath:
或更早的版本中(例如,在viewDidLoad
中,或在PFQuery
完成时)计算它NSNumber
对象,而不是CGFloat
。您需要取消装箱:
NSNumber *heightNumber = self.rowHeightArray[indexPath.row];
return [heightNumber floatValue];
self.rowHeightArray
是空的。因此,如果要使用此数组,需要确保在调用heightforrowatinexpath:
之前填充该数组。有两个问题:
heightforrowatinexpath:
在cellforrowatinexpath:
之前调用。因此,您当前的方法计算高度太晚了。您需要在heightforrowtaindexpath:
或更早的版本中(例如,在viewDidLoad
中,或在PFQuery
完成时)计算它NSNumber
对象,而不是CGFloat
。您需要取消装箱:
NSNumber *heightNumber = self.rowHeightArray[indexPath.row];
return [heightNumber floatValue];
当然,这不适用于当前的实现,因为(正如rmaddy指出的)
self.rowHeightArray
是空的。因此,如果要使用此数组,需要确保在调用heightforrowatinexpath:
之前填充它。要详细说明@AaronBrager的正确答案,请加载,然后在调用数据源之前构建浮点数组。这可以在PFTable vc给您调用的钩子中完成。要在注释中回答您的问题,不需要indexPath,因为我们知道self.objects数组索引、您在此处构建的索引以及传递给datasource方法的索引都将对应(0..self.objects.count-1):
要详细说明@AaronBrager的正确答案,请加载,然后在调用数据源之前构建浮点数组。这可以在PFTable vc给您调用的钩子中完成。要在注释中回答您的问题,不需要indexPath,因为我们知道self.objects数组索引、您在此处构建的索引以及传递给datasource方法的索引都将对应(0..self.objects.count-1):
读取最后一个错误。它告诉你问题所在
rowHeightArray
是空的。我想我应该感谢您没有将其作为回答lol。如果您不介意,为什么它是空的?是因为CellForRowatineXpath在HeightForRowatineXpath之后被调用吗?如果是这样,在调用HeightForRowatineXpath之前,如何使用适当的数据填充NSMutableArray?@BillyA-PFTableVC为您提供了一个钩子:-(void)objectsDidLoad:。。。在那里运行它们以构建浮点数组。(我想)这是在vc重新加载表格之前打电话的。谢谢danh。我现在就去试试。嘿,丹,我正在做这个,我有点像个傻瓜。如何在ObjectsIDLoad方法中构建浮点数组以提取正确的信息?在我的问题之前,我做了如果([object[@“orientation”]isEqual:“left”]|[object[@“orientation”]isEqual:“right”])
然后做了我需要做的事情。如果objectsDidLoad中没有为您提供能够使用objectAtIndex:with的对象,如何获取objectAtIndex:with?请阅读最后一个错误。它告诉你问题所在rowHeightArray
是空的。我想我应该感谢您没有将其作为回答lol。如果您不介意,为什么它是空的?是因为CellForRowatineXpath在HeightForRowatineXpath之后被调用吗?如果是这样,在调用HeightForRowatineXpath之前,如何使用适当的数据填充NSMutableArray?@BillyA-PFTableVC为您提供了一个钩子:-(void)objectsDidLoad:。。。在那里运行它们以构建浮点数组。(我想)这是在vc重新加载表格之前打电话的。谢谢danh。我现在就去试试。嘿,丹,我正在做这个,我有点像个傻瓜。如何在ObjectsIDLoad方法中构建浮点数组以提取正确的信息?在我的问题之前,我做了如果([object[@“orientation”]isEqual:“left”]|[object[@“orientation”]isEqual:“right”])
然后做了我需要做的事情。如果objectsDidLoad中没有为您提供能够使用objectAtIndex:with的对象,如何获取objectAtIndex:with?请在查询完成后填充它。然后重新加载表格。嘿,亚伦,谢谢你的回复!我现在正在做这个,但只是一个问题。如果我错了,请纠正我(因为我可能错了),我认为用numberwhithfloat
生成一个NSNumber
会生成一个CGFloat。这是错误的。NSNumber是围绕非对象编号的对象包装器。(NSNumber
是一个对象,但CGFloat
不是)在查询完成时填充它。然后重新加载表格。嘿,亚伦,谢谢你的回复!我在工作