1

在我的项目中,我有 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

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

4

2 回答 2

1

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

于 2013-04-20T09:10:36.110 回答
0

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

temp=s;

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

尝试

temp = [s copy]; 
于 2013-04-20T09:04:21.660 回答