2

for ループでラベル (CorePlot) オブジェクトを作成し、パラメーターを渡す必要がある NSMutableSet に追加しようとしています。

奇妙なことに、NSMutableSet (最初のオブジェクト) に追加された場合、オブジェクトは 1 つだけで、他のオブジェクトは追加されません。

非常に基本的なものが欠けているようです。

何かアドバイス?

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ため、それらはすべて同じtickLocation- 0 になります。

isEqualすべてのラベルに対して true を返すため、最終的には最初のラベルのみになります。後続NSSetのラベルの追加は、同等のオブジェクトが既にセットにあるためスキップされます。

于 2015-04-10T11:57:56.353 に答える