gpt4 book ai didi

cocoa 宏观——独特的问题

转载 作者:行者123 更新时间:2023-12-03 17:29:44 26 4
gpt4 key购买 nike

我需要 #define 方面的帮助来执行以下操作:

for (int i = 0; i < 47; ++i)  {     SETLABEL(i)     }

SETLABEL() 宏应采用“i”的 intValue 并将其粘贴到标签名称中:

当 i == 1-->    label1.text = (东西)

当 i == 2-->    label2.text = (东西)

这可能吗?以下代码严重失败,因为它粘贴了“i”,而不是“i”的:

#define SETLABEL(x)    [label##x setText: [foo stringValue]];

编辑:感谢您的所有帮助。我的代码现在看起来像这样:

int 的声明是 iB[25]

-(void)stuff {
int x;
int labelGo = 1;

for (int i = 1; i < 25; ++i) {
NSString * labelName = [NSString stringWithFormat:@"magicItemBoughtTot%d", i];
UILabel * currentLabel = [self valueForKey:labelName];
if (iB[i] == itemPH) { // if label is not empty
[currentLabel setText: [NSString stringWithFormat:@"%i",
([currentLabel.text intValue] + 1)]];
labelGo = 0;
}
}
utilityNum = nil;
utilityNum = [NSNumber numberWithInt:labelGo];

}

最佳答案

这个问题的“真正”答案是用 @property 声明您的标签(它们可能已经是),然后执行以下操作:

for (int i = 0; i < 47; ++i) {
NSString * labelName = [NSString stringWithFormat:@"label%d", i];
UILabel * currentLabel = [self valueForKey:labelName];
[currentLabel setText:(stuff)];
}

然而,真正的问题是:为什么 47 个标签都显示相同的内容,而且为什么它们没有更好的名字?

编辑检索基元:

虽然可以使用诸如 valueForKey:object_getInstanceVariable() 之类的东西来检索原始 ivars 的值,但您请求的事实是(在我的书中) )是代码设计不当的标志。即使不查看您的代码,我向您保证有更好的方法来执行此操作。

话虽如此,这里有一个关于如何按名称从实例变量中获取原始值的实弹枪:

#import <objc/runtime.h>

//self has an ivar named "i"
int *iPtr = 0;
object_getInstanceVariable(self, "i", (void**)&iPtr);
NSLog(@"%d", (int)iPtr);

但是,如果您在生产环境中使用此代码进行显式调试之外的任何操作,那么我会说您应该得到任何崩溃。 (并不是说这段代码容易崩溃,而是说它可能代表了其余的代码)

关于 cocoa 宏观——独特的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4443022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com