ARC语义问题"多个方法名为' setRotation' "只存档

时间:2014-03-14 22:33:42

标签: ios objective-c cocos2d-iphone xcode5

我在cocos2dv3中的项目正在抛出 ARC Sematic问题 名为' setRotation的多种方法:'发现结果不匹配,参数类型或属性 归档(发布模式)。它在部署到模拟器/设备(调试模式)时运行良好。 在发布模式下,编译器在UIRotationGestureRecognizerCCNode中的轮换实现之间混淆。 当我在CCBAnimationManager.m中收到错误时,我将调用选择器setRotation的对象类型化为(CCNode *),但随后错误在CCActionInterval中爬升。我希望有更好的解决方案,而不是在cocos2d库中进行类型转换。

我做错了什么? 谢谢你的时间。

修改

@interface CCAction : NSObject <NSCopying> {
    id          __unsafe_unretained _originalTarget;
    id          __unsafe_unretained _target;
    NSInteger   _tag;
}
@property (nonatomic,readonly,unsafe_unretained) id target;
@property (nonatomic,readonly,unsafe_unretained) id originalTarget;
@property (nonatomic,readwrite,assign) NSInteger tag;

in

CCAction.m
@synthesize tag = _tag, target = _target, originalTarget = _originalTarget;


-(void) startWithTarget:(id)aTarget
{
    _originalTarget = _target = aTarget;
}

-(void) startWithTarget:(id)aTarget
{
    _originalTarget = _target = aTarget;
}

类层次结构

@interface CCActionFiniteTime : CCAction <NSCopying> 
@interface CCActionInterval: CCActionFiniteTime <NSCopying>
@interface CCBRotateTo : CCActionInterval <NSCopying>

CCBRotateTo.m {

   -(void) startWithTarget:(CCNode *)aTarget
   {
      [super startWithTarget:aTarget];
      startAngle_ = [self.target rotation];
      diffAngle_ = dstAngle_ - startAngle_;
   }

   -(void) update: (CCTime) t
   {
      [self.target setRotation: startAngle_ + diffAngle_ * t];
   }

}

2 个答案:

答案 0 :(得分:7)

这个问题让我头疼不已。虽然我已经为我的旧项目将cocos2d升级到v2.2版本(太复杂而无法更新到v3),但我仍然收到了此警告。我创建的任何动画在SpriteBuilder中使用旋转确实很奇怪,正如我在这里描述的那样: Rotation animation issue on iPhone5S with cocos2d 2.0

最后我在CCBAnimationManager.m

中使用了类型转换来解决它
@implementation CCBRotateTo
-(void)startWithTarget:(CCNode *)aTarget
{
    [super startWithTarget:aTarget];
    starAngle_ = [(CCNode *)self.target rotation];
    diffAngle_ = dstAngle_ - startAngle_;
}

-(void)update:(ccTime)t
{
    [(CCNode *)self.target setRotation: startAngle_ + diffAngle_ * t];
}

有了这个改变,现在我也可以支持arm64了。

答案 1 :(得分:0)

将您的cocos2dv3更新为最新版本(目前为RC4)。

我正在使用Xcode 5.0和cocos2dv3 RC1没有问题。 但是将Xcode更新为5.1我遇到了这个问题。 所以我将cocos2dv3更新为RC4,现在工作正常。

您可以在here找到cocos 2d最新版本。