我正在for循环中创建一个标签(CorePlot)对象并尝试将其添加到NSMutableSet中,我需要传递一个参数。
奇怪的是,只有一个对象添加到NSMutableSet(第一个)而其他对象没有被添加。
看起来我错过了一些非常基本的东西。
有什么建议吗?
我附上代码的屏幕截图,因为我想显示NSSet对象持有的值。
图片1 - 对象被添加到NSMutableArray但没有添加到NSSet Forming From the array
图1中使用的代码 -
NSArray *months = [NSArray arrayWithObjects:@"Oct",@"Nov",@"Dec",@"Jan",@"Feb",nil];
NSMutableArray *xLabels = [[NSMutableArray alloc] init];
for (NSString *month in months) {
CPTAxisLabel *label = [[CPTAxisLabel alloc] initWithText:month textStyle:axisTextStyle];
[xLabels addObject:label];
}
NSSet *xLabelSet = [NSSet setWithArray:xLabels];
x.axisLabels = xLabelSet;
图像2 - 未添加到NSMutableSet的对象
图2中使用的代码 -
NSArray *months = [NSArray arrayWithObjects:@"Oct",@"Nov",@"Dec",@"Jan",@"Feb",nil];
//NSMutableArray *xLabels = [[NSMutableArray alloc] init];
NSMutableSet *xLabelSet = [[NSMutableSet alloc] initWithCapacity:[months count]];
for (NSString *month in months) {
CPTAxisLabel *label = [[CPTAxisLabel alloc] initWithText:month textStyle:axisTextStyle];
[xLabelSet addObject:label];
}
//NSSet *xLabelSet = [NSSet setWithArray:xLabels];
x.axisLabels = xLabelSet;
答案 0 :(得分:3)
CPTAxisLabel的isEqual
方法的文档说明了 -
如果轴标签具有相同的tickLocation,则它们是相同的。
由于您没有为要添加的标签指定tickLocation
属性,因此它们将具有相同的tickLocation
- 0。
由于isEqual
对所有标签都返回true,因此只会在NSSet
中找到第一个标签 - 后续标签的添加将被跳过,因为相同的对象已经在集合中。
答案 1 :(得分:0)
我没有在您的代码中看到错误,但我建议使用CFMutableSetRef
,因为它具有免费桥接功能。使用它将使您能够将其作为您需要的参数。
使用CFMutableSetRef
中的消息(方法)可以添加更多对象。
我要尝试的另一件事就是使用CPTAxisLabels
做一个数组并使用addObjectsFromArray
中的方法NSMutableSet
并检查它是否有效。