递归地创建对象并从所述对象中的数组复制特定对象

时间:2010-11-04 07:56:02

标签: objective-c arrays object copy nscopying

所以,我在编程项目上苦苦挣扎。

我有一个存储玩家信息,名字,胜利和损失的对象。

我继续在另一个设置播放器信息值的对象(括号)中使用该对象,在每个循环之后,它将播放器对象复制到括号类中的NSMutable。

在括号类中,我有一个打印信息的方法,这很容易弄明白。

现在,为了生成下一个括号会发生什么,我设置了一个方法,当它完成复制谁赢或输时会返回一个括号。

我在同一个括号方法中完成了所有操作,因此我可以尽可能轻松地访问数据。我如何只是制作播放器对象的副本并将其添加到新括号?

当我尝试打印出刚刚生成的Bracket时,我发现我只是得到垃圾值或者什么都没有。这是我的功能,我遇到了麻烦。

-(Bracket *) NextRound//Configures the next round
{
 int i, y, *selection; //counter and selection
 int comp;
 y = 1;
 i = 0;//so the counter won't get messed up

 Bracket *roundx = [Bracket new]; //creates the bracket that will be sent back with the winners. 

   NSLog(@"Did %@(1) or %@(2) win (1 or 2)?: ",[[playerarray objectAtIndex:i] name], [[playerarray objectAtIndex:y] name]);
  scanf("%d",&selection); 
  comp = selection++;

  if (comp == 1)
  {  
   NSLog(@"Player %d %@ selected to win", i, [[playerarray objectAtIndex:i] name]);


   [[self.playerarray objectAtIndex:i] setNext];//bool value for win or not
   [roundx.playerarray addObject: [self.playerarray objectAtIndex:i]];
   [roundx Print];//Too see if it has anything, usually it does not.

  }
  else
  {
   i++;
   NSLog(@"Player %d %@ selected to win", i, [[playerarray objectAtIndex:i] name]);
   [[self.playerarray objectAtIndex:i] setNext];
   [roundx.playerarray addObject: [self.playerarray objectAtIndex:i]];
   [roundx Print];

  }
 return(roundx);
}

所以,我认为这样才会奏效。它编译得很好(我得到一些警告,但它是关于整数,我主要用于逻辑)。

谢谢!

1 个答案:

答案 0 :(得分:0)

我的评论:

选择的定义不正确。您已将其定义为指向int的指针,但您正在使用它,就像它在代码中的任何位置都是一个int。请注意,selection ++通过sizeof(int)而不是1来增加选择。

你不应该使用-new初始化对象,但是-alloc然后是-init。 (这是现代惯例)。

问题的最可能原因是playerarray未初始化。