NSMutableSet不添加多于1个对象

时间:2015-04-10 10:56:01

标签: ios core-plot nsmutableset

我正在for循环中创建一个标签(CorePlot)对象并尝试将其添加到NSMutableSet中,我需要传递一个参数。

奇怪的是,只有一个对象添加到NSMutableSet(第一个)而其他对象没有被添加。

看起来我错过了一些非常基本的东西。

有什么建议吗?

我附上代码的屏幕截图,因为我想显示NSSet对象持有的值。

图片1 - 对象被添加到NSMutableArray但没有添加到NSSet Forming From the array

Objects gets added to NSMutableArray but not to NSSet Forming From that 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的对象 Objects not getting added to 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;

2 个答案:

答案 0 :(得分:3)

CPTAxisLabel的isEqual方法的文档说明了 -

  

如果轴标签具有相同的tickLocation,则它们是相同的。

由于您没有为要添加的标签指定tickLocation属性,因此它们将具有相同的tickLocation - 0。

由于isEqual对所有标签都返回true,因此只会在NSSet中找到第一个标签 - 后续标签的添加将被跳过,因为相同的对象已经在集合中。

答案 1 :(得分:0)

我没有在您的代码中看到错误,但我建议使用CFMutableSetRef,因为它具有免费桥接功能。使用它将使您能够将其作为您需要的参数。

使用CFMutableSetRef中的消息(方法)可以添加更多对象。

我要尝试的另一件事就是使用CPTAxisLabels做一个数组并使用addObjectsFromArray中的方法NSMutableSet并检查它是否有效。