2

这可能吗?

举一个具体的例子,考虑以下宏:

define pos
po ([self $arg0])
end

所以现在如果我输入 pos 文本,它就会变成 po [self text]。但如果有多个参数,它会失败,例如 pos textLabel 文本变成 po [self textLabel] 而不是所需的 po [[self textLabel]text]。

再举一个例子,就像三个命令

po someIvar_
po [self someMethod]
po [[self someMethod]someOtherMethod] 

打印出引用的三个对象的描述,最好定义一个对整数执行相同操作的宏 pi,即

pi [self someMethod] 

和调用一样

print (int)[self someMethod], 

同样对于

pi [[self someMethod]someOtherMethod].
4

2 回答 2

1

用户定义的命令只是在执行之前比字符串替换多一点。您的示例pos textLabel text将两个参数传递给仅考虑一个参数的命令。第二个被扔掉了。它应该在po [self textLabel]执行之前产生。您所做的与以下 java-sum-function 相当:
int sum(int[] args){return args.get(0);}

你需要的是这里提到的东西

define pos
    if $argc == 1
        po [self $arg0]
    end
    if $argc == 2
        po [[self $arg0] $arg1]
    end
    ..... (as many you need)
end

我还没有找到任何类型的循环。所以这应该是唯一的方法,除了可以从 args 中弹出 arg0 并且允许用户定义命令的递归调用。但我认为完成上面的例子更容易。

pi应该以同样的方式实现

define pi
    if $argc == 1
        print (int)[self $arg0]
    end
    if $argc == 2
        print (int)[[self $arg0] $arg1]
    end
    ....
end

也许有更好的解决方案,但这会让您向目的地更进一步。

于 2011-09-29T16:16:07.130 回答
0

如果您尝试在终端中使用 po pi 命令来查看对象的值,或者您想在运行时更改该值,那么这里是解决方案:

现在这是在 XCode 4 中调试和分析目标 c 代码的最佳解决方案。如果您想在运行时更改变量的值,您只需单击“运行 > 显示 > 表达式...”即可轻松更改可以为您的变量名提供值。

但是我怀疑您的问题不是Objective-C问题,但我仍然尽力提供解决方案。

于 2011-09-29T17:46:08.550 回答