无法访问精灵的userdata属性

时间:2013-04-20 06:40:06

标签: ios objective-c xcode cocoa-touch cocos2d-iphone

在我的项目中我有10个精灵,每个精灵都有一个唯一的userData值。在ccTouch方法中我将精灵复制到新的精灵,

但是我无法获得精灵用户数据值。

我的编码是

 for (int i=1; i<=10; i++)
      {
       CCSprite *zig=[CCSprite spriteWithFile:[NSString stringWithFormat:@"zig%d.png",i]];
        zig.position=ccp(325,60);
        zig.tag=i+1;
        zig.userData=[NSString stringWithFormat:@"%@",[zigpositionarray objectAtIndex:i-1]];
        [self addChild:zig z:2];
       [zigblurarray addObject:zig];
            NSLog(@"Userdata%@",zig.userData);
      }

在cctouchBegan方法中:

  for(CCSprite *s in zigblurarray)
  { 
   if (CGRectContainsPoint(s.boundingBox, Newpt1))
   {
       temp=s;
       temp.userData=s.userData;
       NSLog(@"%d",temp.tag);
        NSLog(@"Userdata%@",temp.userData);
    }

最终我得到了lldb错误

0x170409b:movl 8(%edx),%edi EXC_BAD_ACCESS

请任何人帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

该字符串是自动释放的。 userData属性的类型为void *,不会保留该对象。请改用userObject属性(如果在cocos2d版本中可用)或保留字符串。

答案 1 :(得分:0)

将一个对象分配给另一个变量不会复制它。请记住,对象只是表示为对象的指针。

之后

temp=s;

temp也指向st.userData已经s.userData,因为它们是同一个对象。

尝试

temp = [s copy];