通过在类别中添加属性将属性添加到类中时,获取“无法识别的选择器...”

时间:2016-06-21 21:19:54

标签: ios objective-c xcode objective-c-category

我尝试扩展SKSpriteNode,尝试了几种方法(通过在新类中建立关系,直接扩展它),最后我想尝试使用类别。因此,我使用助手在XCode中创建一个正确的类别,并选择SKSpriteNode作为类别的类。我扩展了现有的类,并使用名为SKSpriteNode + StaticLevelElement.h和SKSpriteNode + StaticLevelElement.m的其他方法和属性创建一个新文件。出于某种原因,我无法添加属性。我试过了

  1. 在类别的.m文件中为新属性添加setter和getter方法,但仍然收到消息“无法识别的选择器已发送到实例”。

  2. 在类别实现中的每个新属性前面添加@dynamic,结果与上面相同。

  3. 在构建设置中尝试设置其他链接器标记,得到与上面相同的结果。

  4. 尝试使用关联对象(http://www.davidhamrick.com/2012/02/12/Adding-Properties-to-an-Objective-C-Category.html),结果相同。

  5. 有什么建议吗?我很想使用类别,我仍然不想放弃它,因为我看到它们有多酷,在XCode可视化编辑器中使用精灵,而不仅仅是以编程方式,使得很容易看到结果直接,而不是必须扩展课程并以编程方式完成所有事情,并希望获得良好的游戏外观和感觉。

    相关代码:

    //  SKSpriteNode+StaticLevelElement.m
    #import <objc/runtime.h>
    #import "SKSpriteNode+StaticLevelElement.h"
    
    NSString * const gamePlayLogicSelector = @"gamePlayLogic";
    NSString * const pseudoDepthSelector = @"pseudoDepth";
    
    @implementation SKSpriteNode (StaticLevelElement)
    
    @dynamic gamePlayLogic;
    @dynamic pseudoDepth;
    @dynamic theName;
    @dynamic gameScene;
    
    
    - (void)setPseudoDepth:(float)pd
    {
        objc_setAssociatedObject(self, (__bridge const void *)(pseudoDepthSelector), pd, OBJC_ASSOCIATION_COPY);
    }
    

    最后一行导致错误“将'浮动'传递给不兼容类型'id'的参数。

    我在这里缺少什么?

0 个答案:

没有答案