2

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

奇怪的是,如果添加到 NSMutableSet(第一个)中,则只有一个对象,而其他对象则不添加。

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

有什么建议吗?

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

图 1 - 对象被添加到 NSMutableArray 但不是从该数组形成的 NSSet

对象被添加到 NSMutableArray 但不是从该数组形成的 NSSet

图 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 的对象 未添加到 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;
4

2 回答 2

3

isEqualCPTAxisLabel 方法的文档说-

如果轴标签具有相同的刻度位置,则它们是相等的。

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

由于isEqual所有标签都返回 true,因此您最终只会得到第一个NSSet标签 - 由于集合中已经存在相等的对象,因此跳过了后续标签的添加。

于 2015-04-10T11:57:56.353 回答
0

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

也许使用来自的消息(方法)CFMutableSetRef将使您能够添加更多对象。

CPTAxisLabels我会尝试的另一件事是简单地使用 the和使用中的方法创建一个数组,addObjectsFromArrayNSMutableSet检查它是否有效。

于 2015-04-10T11:50:05.793 回答