希望得到一些建议。
我有一个 Levels Engine 类,它创建一个名为levelArray 的 NSMutable 数组。
我正在将数据传递到工作正常的级别 View Controller 。
我还有一个粒子发射器类,我希望将关卡数据传递给它。
但是,当我将数组传递给粒子发射器类时,我不断被告知数组的计数级别为 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,而不是传递到 View Controller ?如果是这样,我该如何传递数据?
最佳答案
有几件事。
**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 而不更改 View 中的值。
重要提示:不要忘记在 Particle 发射器类中创建一个 -dealloc: 方法来释放 newlevelsArray:
-(void)dealloc {
if (newlevelsArray) [newlevelsArray release];
[super dealloc];
}
另一种解决方案是使用 setter。
而不是:
2) 将第二行更改为 newlevelsArray = [view.levelsArray copy];
做:
2) 将第二行更改为 this.newlevelsArray = view.levelsArray;
您必须使用
@property(复制)NSMutableArray * newlevelsArray;
请注意使用“复制”而不是“保留”。这将逐个字段地复制数组,这对于可变对象的容器来说是最可取的。
关于iphone - 将数组中的数据从一个类传递到另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5268905/