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

标签 iphone objective-c arrays xcode

希望得到一些建议。

我有一个 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/

相关文章:

ios - 如何在 iOS 的 cocoapod 库中使用图像 Assets 目录

iphone - 使用套接字流将图像或视频发送到服务器

iphone - AVPlayer 不播放视频文件

php - 当 Laravel 中返​​回更多结果时,循环关联数组返回单个结果

iphone - UIView 透明度显示香肠是如何制作的!

iphone - 如何在 iPhone 中创建链接按钮?

ios - 在 GCD 中,是否保证串行队列中的所有任务都在同一个线程中运行?

ios - 使用按钮快速循环遍历数组项

PHP循环遍历数组从n到n-1个元素

iphone - 导航 Controller 上的编辑按钮不进入编辑模式