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
中的第一个 - 添加后续标签将作为一个相等的对象跳过已经在集合中了。
我正在 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
中的第一个 - 添加后续标签将作为一个相等的对象跳过已经在集合中了。