-1

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

在“__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 的新手。

4

2 回答 2

3

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

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

于 2013-08-08T14:49:23.833 回答
2

您的变量 callingMethod 的类型为“id”。在 Obj-C 的土地上,“id”除了基本任何东西的地址之外没有任何意义。编译器不知道 callMethod 对象的真实类型,因此假定它没有任何方法。您可以通过两种方式解决此问题:

更改方法声明以合并“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

于 2013-08-08T14:55:09.757 回答