-2

我刚开始学习ObjectiveC,但遇到了问题。

我在 for 循环中有一个变量,这个变量在任何迭代中都会改变值,我想得到他的值。

这里我的问题是变量是“名称”:

对于第 1 次迭代 name='id' 对于第 2 次迭代 name='city' ...

for (i = 0; i < count; i++) {
name = ivar_getName(ivars[i]);
encode = ivar_getTypeEncoding(ivars[i]);
type = decode_type_string(encode);
if (strncmp(encode, "@", 1) == 0)
{
printf(" '%s', ", [[obj name*]UTF8String]);
}
else
{
printf(" %s ", name);
}
}

我的目标是变量由它的值来解释。如果在我的迭代变量名称中设置为“ID”我想要:[obj name] => [id obj](用于我的实例的 id)如果在我的迭代变量名称中设置为“City”我想要有:[obj name] => [obj City](对于我的实例的城市)(对不起我的英语)

4

4 回答 4

2

我认为您对几件事感到非常困惑。首先,NSString 对象不以“@”作为字符串的第一个字符。相反,“@”字符用于区分 C 字符串文字(例如,“abc”)和 Objective-C NSString 文字(例如,@“abc”)。请注意,“@”字符在引号之外。

其次,如果您有一个具有名为“name”的属性的对象,您可以使用 或 引用它的值,并使用或[myObj name]设置myObj.name它。[myObj setName:newValue];myObj.name = newValue;

如果您有一个 NSString 对象要打印用于诊断目的,您可以使用NSLog(@"Here is the string ->%@", theString);. 这%@是一个特殊的 Objective-C 格式化代码,意思是“将下一个格式参数视为一个对象并调用它的description方法,然后显示该结果”。

(如果你“只是在学习”Objective-C,就没有理由ivar_getName和它的同类混在一起。很少需要这样的函数。)

于 2013-05-26T12:50:51.723 回答
0

如果要打印 Objective-C 字符串,请使用NSLog

NSLog(@" %@ ", [obj name]);
于 2013-05-26T12:09:22.543 回答
0

要在 Objective-C 中打印字符串,您可以使用 NSLog。电话看起来像

NSLog(@"%@",[obj name]);
于 2013-05-26T12:09:30.433 回答
0

不确定我是否完全正确地阅读了您的问题-但我认为您想动态获取它们。

请参阅下面的示例。

德。

#import <Foundation/Foundation.h>
#import <objc/runtime.h>

@interface Frob : NSObject;
@property (strong) NSString * name, * bar, * fred;
@end
@implementation Frob
@end

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        Frob * frob = [[Frob alloc] init];
        frob.name = @"aName value";
        frob.bar = @"aBar value";
        frob.fred = @"aFred value";

        const char *lst[] = { "name", "bar", "fred" };
        for(int i = 0; i < sizeof(lst)/sizeof(char*); i++)
        {
            const char * nameStr = lst[i];

            SEL s = sel_getUid(nameStr);
            if (s) {
                NSString * val = [frob performSelector:s];
                NSLog(@"%s --> %@\n", nameStr, val);
                printf("%s --> %s", nameStr, [val UTF8String]);
            }
        }
    }
    return 0;
}
于 2013-05-26T12:31:08.437 回答