如何访问其他类中的变量

时间:2013-08-08 14:44:16

标签: objective-c

我正在尝试访问另一个类中的变量,但它给了我错误

  

在'__strong id'

类型的对象上找不到属性'itemType'

基本上,我用这个

来启动课程
 GameMsgs *warningMsg = [[GameMsgs alloc]initWithItem:@"remove_village-object-warning" andCallingMethod:self];

并在GameMsgs中......

- (id)initWithItem:(NSString*)itemTypeP andCallingMethod:(id)callingMethod
{
    if ((self = [super init]))
    {
        sharedInstance = [SKGame sharedInstance];

        myCallingMethod = callingMethod;

...

但是当我尝试访问myCallingMethod中的变量时,我得到了上述错误。这就是我试图访问它的方式......

 Text *valueT = [[Text alloc] initWithText:[[myCallingMethod.itemType objectForKey:@"templateKingdomObject"] objectForKey:@"removeCost"] withX:70 withY:60 withSize:14 withFieldWidth:100 withFieldHeight:30 withColour:0xffffff withFont:@"MarkerFelt-Thin"];

错误发生在itemType的开头。

myCallingMethod是一种id。

我认为这是显而易见的,但我仍然是Obj-c的新手。

2 个答案:

答案 0 :(得分:3)

问题是myCallingMethod is a type of id。这意味着myCallingMethod可以是任何类型的对象。这意味着编译器不知道它是什么,因此它不知道你的点符号是否正确。

您可以使用传统的方法表示法(然后编译器只会信任您并在运行时抛出异常,如果您错了)。或者,更改myCallingMethod的定义以使用实际的类名(定义属性itemType的名称)。

答案 1 :(得分:2)

您的变量callingMethod的类型为“id”。在Obj-C的土地上,“id”并不代表任何地方以外的任何东西。编译器不知道callingMethod对象的实际类型,因此假定它没有任何方法。您可以通过两种方式解决此问题:

更改方法声明以包含“callingMethod”变量的实际类

- (id)initWithItem:(NSString *)itemTypeP andCallingMethod:(YourClass *)callingMethod

或者通过在您需要的地方投射到您自己的类型。

Text *valueT = [[Text alloc] initWithText:[[((YourClass *)myCallingMethod).itemType objectForKey:@"templateKingdomObject"] objectForKey:@"removeCost"] withX:70 withY:60 withSize:14 withFieldWidth:100 withFieldHeight:30 withColour:0xffffff withFont:@"MarkerFelt-Thin"];

但这太丑了。

这是假设您的变量“callingMethod”属于一种类型,否则请查看protocols