我正在尝试访问另一个类中的变量,但它给了我错误
在'__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的新手。
答案 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。