gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 21:20:23 24 4
gpt4 key购买 nike

希望得到一些建议。

我有一个 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;您必须使用

将 newlevelsArray 定义为 ParticleEmitter 类的属性

@property(复制)NSMutableArray * newlevelsArray;

请注意使用“复制”而不是“保留”。这将逐个字段地复制数组,这对于可变对象的容器来说是最可取的。

关于iphone - 将数组中的数据从一个类传递到另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5268905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com