将数组中的数据从一个类传递到另一个类

时间:2011-03-11 04:19:50

标签: iphone objective-c arrays xcode

希望得到关于某事的建议。

我有一个Levels Engine类,它创建一个名为levelsArray的NSMutable Array。

我将数据传递给Levels View Controller,它正常工作。

我还有一个粒子发射器类,我希望传递水平数据。

然而,当我将它传递给Particle Emitter类时,我不断被告知数组的计数级别为0.

数组已正确设置:

    **LevelsEngine.h**  
    @interface
    LevelsEngine : NSObject {   
    NSMutableArray *levelsArray;         }

    @property (retain) NSMutableArray
    *levelsArray;  




    **LevelsEngine.m**  
    @synthesize levelsArray;  
    LevelsArray =[NSMutableArray array];


    **Code used in ParticleEmitter.m**   
    newlevelsArray = [NSMutableArray array];  
    newlevelsArray=view.levelsArray;

我是否正确地认为我遇到了这个错误,因为我试图将数组数据从一个NSObject传递到另一个NSObject而不是传递给视图控制器?如果是这样,我该如何传递数据?

2 个答案:

答案 0 :(得分:1)

一些事情。

    **Code used in ParticleEmitter.m**   
    newlevelsArray = [NSMutableArray array];  
    newlevelsArray=view.levelsArray;

第一行是创建一个新数组。 第二行是将newlevelsArray指定为view.levelsArray中指向数组的指针,使您在第1行中创建的对象保持孤立状态。

我认为你打算将第二行作为数组的字段副本,但是对象的赋值不会那样。

你可以通过两件事来解决这个问题。

1)删除第一行newlevelsArray = [NSMutableArray array];

2)将第二行更改为`newlevelsArray = [view.levelsArray copy];

这实际上会做一个副本,这可能是你想要的,因为你可以继续修改ParticleEmitter.m中的newlevelsArray而不改变视图中的值。

重要提示:不要忘记在粒子发射器类中创建一个-dealloc:方法,该方法会释放newlevelsArray:

-(void)dealloc {
   if (newlevelsArray) [newlevelsArray release];
   [super dealloc];
}

另一种解决方案是使用setter。

而不是:

2)将第二行更改为newlevelsArray = [view.levelsArray copy];

执行:

2)将第2行更改为this.newlevelsArray = view.levelsArray; 您必须使用

将newlevelsArray定义为ParticleEmitter类的属性

@property (copy) NSMutableArray * newlevelsArray;

请注意使用“复制”而不是“保留”。这将执行数组的字段副本,这很可能适用于可变对象的容器。

答案 1 :(得分:0)

您需要更改代码,

在LevelsEngine.h调用中调用newlevelarray。

,您的代码应该是

Classobject.newlevelsArray = [nsarray arraywitharray:LevlesArray];

这可以解决您的问题。