【问题标题】:Warnings in Objective c with method callObjective c 中带有方法调用的警告
【发布时间】:2011-08-18 19:01:30
【问题描述】:

我认为这会很简单地回答,我只是不知道如何摆脱这些警告。

当我执行此方法调用时,'DebugZoneLayer' 可能无法响应'-getGID:tileKind' 并且 初始化从没有强制转换的指针生成整数

int blocksCollidableGID  = [debugZoneLayer getGID:[NSValue valueWithCGPoint:(NSString*)tileCoord] tileKind:@"blocksCollidable"];

我尝试了转换这些类型值的所有不同组合。

在 DebugZoneLayer.h 我有:

-(int) getGID:(CGPoint)tileCoord withTileKind:(NSString*)tileKind;

谢谢

【问题讨论】:

  • 你真的#import'ed DebugZoneLayer.h 吗?此外,第一个参数是CGPoint 类型,但你做错了:你传递了一个指向NSValue 的指针,而在对valueWithCGPoint: 的调用中,它需要一个CGPoint,你正在向指向NSString 的指针?双重哎哟。
  • NSValue 是一个 ObjC 对象,而 CGPoint 是一个结构体。
  • 是的,我已经导入了 DebugZoneLayer.h。我以为我在做的事情很糟糕,是的。
  • 所以.. 我还没有在这里找到答案。有人吗?

标签: objective-c pointers methods casting warnings


【解决方案1】:

tileCoord 或 tileKind 都不需要强制转换

int blocksCollidableGID = [debugZoneLayer getGID:tileCoord withTileKind:@"blocksCollidable"];

【讨论】:

    【解决方案2】:

    显然它应该是 withTileKind 而不是 tileKind。

    编辑:我的意思是这一行;-)

    int blocksCollidableGID  = [debugZoneLayer getGID:[NSValue valueWithCGPoint:(NSString*)tileCoord] withTileKind:@"blocksCollidable"];
    

    编辑:

    所以现在你摆脱了警告。现在编译器发现了一些其他错误,就像已经提到的其他错误一样。由于您似乎卡在这一点上,我会尝试猜测该怎么做。

    你提到过,tileCoord 是一个 CGPoint。因此,无论如何都绝对不需要转换或转换它。试试这行代码:

    int blocksCollidableGID  = [debugZoneLayer getGID:tileCoord withTileKind:@"blocksCollidable"];
    

    看看是否还有其他错误。

    【讨论】:

    • 即使将其更改为 CGPoint,我也会收到错误 CGPoint is not an Objective-C class name or alias。我写的是 int blocksCollidableGID = [debugZoneLayer getGID:[CGPoint valueWithCGPoint:(NSString*)tileCoord] withTileKind:@"blocksCollidable"];
    • 阅读其他答案,您的代码中还有其他错误,这些错误会揭示您何时解决了我告诉您的警告问题。
    • 好的,我现在意识到你写的那一行并不是试图展示正确的写法。我真的不知道在这里做什么。与 int blocksCollidableGID = [debugZoneLayer getGID:[CGPoint valueWithCGPoint:tileCoord] withTileKind:@"blocksCollidable"]; 相同的错误
    • 是的,我只指出了如何删除您要求的警告。之后,编译器会找到该方法,但您会因其他错误而出错。
    • 您发布了一些消除警告但现在给出错误的内容?
    【解决方案3】:

    septi 关于选择器拼写错误是正确的,但似乎还有一些其他问题。

    • -valueWithCGPoint: 需要一个 CGPoint(NSString *) 的转换不正确。 tileCoord 是什么?
    • 第一个参数声明为采用CGPoint,而不是NSValue,因此一开始似乎不需要装箱。

    【讨论】:

    • 我应该提到... tileCoord 是一个CGPoint。
    • 所以如果不需要装箱,我是不是在写这样写它的轨道上? int blocksCollidableGID = [debugZoneLayer getGID:[CGPoint valueWithCGPoint:tileCoord] withTileKind:@"blocksCollidable"];如果没有拳击,你会怎么做?
    • 试试这个:[debugZoneLayer getGID:tileCoord withTileKind:@"blocksCollidable"];。我所说的“拳击”是-valueWithCGPoint: 位。如果该方法采用CGPoint,而您有CGPoint,则只需传递它,而不是将其装箱在NSValue 中。
    【解决方案4】:

    另外第一个参数不应该是NSValue,应该是CGPoint。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      相关资源
      最近更新 更多