NSMutableSet 不添加超过 1 个对象

NSMutableSet not adding more than 1 object

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

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

看来我缺少一些非常基本的东西。

有什么建议吗?

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

图 1 - 对象被添加到 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

图 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;

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

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

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

CPTAxisLabel 的 isEqual 方法的文档说 -

Axis labels are equal if they have the same tickLocation.

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

因为 isEqual returns 对于所有标签都是正确的,所以您最终只会得到 NSSet 中的第一个 - 添加后续标签将作为一个相等的对象跳过已经在集合中了。