将 NSButton IBOutlet 名称存储在数组中然后访问数组以在 NSButton 上设置图像时出错

Error storing NSButton IBOutlet name in array then accessing array to setImage on NSButton

请帮忙。我的 window 中有 4 个 NSButton(配置为渐变样式),根据用户输入,我将按钮的颜色设为四种不同颜色之一(通过 setImage 使用 .png 文件)。我的代码运行良好:

if ([[ranColors objectAtIndex:0] isEqualToString:@"red"]) {
    [color1 setImage:[NSImage imageNamed:@"Red.png"]];
}
else if ([[ranColors objectAtIndex:0] isEqualToString:@"yellow"]) {
    [color1 setImage:[NSImage imageNamed:@"Yellow.png"]];
}
else if ([[ranColors objectAtIndex:0] isEqualToString:@"blue"]) {
    [color1 setImage:[NSImage imageNamed:@"Blue.png"]];
}
else {
    [color1 setImage:[NSImage imageNamed:@"Green.png"]];
}

我为 4 个按钮(颜色 1、颜色 2、颜色 3 和颜色 4)重复此代码 4 次。 ranColors 是一个保存用户颜色选择的数组。

我试图通过使用 NSArray 来保存按钮 IBOutlet 名称来简化代码:color1、color2、color3 和 color4,然后使用 for 循环遍历 4 个循环。这是代码:

for (int x = 0; x < 4; ++x) {
if ([[ranColors objectAtIndex:x] isEqualToString:@"red"]) {
    [[revealPositions objectAtIndex:x] setImage:[NSImage imageNamed:@"Red.png"]];
    }
else if ([[ranColors objectAtIndex:x] isEqualToString:@"yellow"]) {
    [[revealPositions objectAtIndex:x] setImage:[NSImage imageNamed:@"Yellow.png"]];
    }
else if ([[ranColors objectAtIndex:x] isEqualToString:@"blue"]) {
    [[revealPositions objectAtIndex:x] setImage:[NSImage imageNamed:@"Blue.png"]];
    }
else {
    [[revealPositions objectAtIndex:x] setImage:[NSImage imageNamed:@"Green.png"]];
    }
}

我收到错误:[__NSCFConstantString setImage:]:无法识别的选择器已发送至实例 0x100006098。当我读取数组元素然后尝试将 setImage 设置为正确的文件时发生错误。看来我无法将按钮的 IBOutlet 名称存储在数组中,然后访问该名称并为其设置 属性。

如有任何帮助,我们将不胜感激。

如果将字符串设置为与文件名相同,则无需循环即可设置所有颜色。

[color1 setImage:[NSImage imageNamed:[NSString stringWithFormat:@"%@.png",[ranColors objectAtIndex:0]]]];
[color2 setImage:[NSImage imageNamed:[NSString stringWithFormat:@"%@.png",[ranColors objectAtIndex:1]]]];
[color3 setImage:[NSImage imageNamed:[NSString stringWithFormat:@"%@.png",[ranColors objectAtIndex:2]]]];
[color4 setImage:[NSImage imageNamed:[NSString stringWithFormat:@"%@.png",[ranColors objectAtIndex:3]]]];

您确定 [revealPositions objectAtIndex:x] 存储了 NSButton Post 您在该数组中存储 UIButton 的代码以进行说明。

Post 不管成功与否回来。