spa*_*omb 0 objective-c cocos2d-iphone
我一直在寻找解决方案很长一段时间,其他线程都没有帮助.基本上,我想要完成的是创建一个自定义对象数组作为单例,将它们加载到我的级别,然后创建它们的副本,因为将操纵分配给这些对象的变量.但是当级别完成(或失败)时,我希望这些对象保持不变,以便我可以重新加载它们.
以下是我尝试过的一些事情.
- (void)spawnStartTiles {
//where _puzzleGridTilesArray and curLevel.gridTiles are NSMutableArrays
[_puzzleGridTilesArray removeAllObjects];
_puzzleGridTilesArray = [curLevel.gridTiles mutableCopy];
CCLOG(@"tile in curlevel %@", curLevel.gridTiles[0]); //want these to log DIFFERENT objects
CCLOG(@"tile in puzzle array %@", _puzzleGridTilesArray[0]);//want these to log DIFFERENT objects
}
Run Code Online (Sandbox Code Playgroud)
以上记录了相同的对象ID.
- (void)spawnStartTiles {
//where _puzzleGridTilesArray and curLevel.gridTiles are NSMutableArrays
_puzzleGridTilesArray = [self cloneArray:curLevel.gridTiles];
CCLOG(@"tile in curlevel %@", curLevel.gridTiles[0]); //want these to log DIFFERENT objects
CCLOG(@"tile in puzzle array %@", _puzzleGridTilesArray[0]);//want these to log DIFFERENT objects
}
-(NSMutableArray*)cloneArray:(NSMutableArray *)myArray {
return [[NSMutableArray alloc] initWithArray: myArray];
}
Run Code Online (Sandbox Code Playgroud)
仍记录相同的对象ID.
- (void)spawnStartTiles {
//where _puzzleGridTilesArray and curLevel.gridTiles are NSMutableArrays
_puzzleGridTilesArray = [[NSMutableArray alloc] initWithArray:curLevel.gridTiles copyItems:YES];
CCLOG(@"tile in curlevel %@", curLevel.gridTiles[0]); //want these to log DIFFERENT objects
CCLOG(@"tile in puzzle array %@", _puzzleGridTilesArray[0]);//want these to log DIFFERENT objects
}
Run Code Online (Sandbox Code Playgroud)
以上给出了运行时错误.我认为这是因为我复制的对象是一个名为的自定义类Tile.该类是CCNode,.h文件位于下方.
#import "CCNode.h"
@interface Tile : CCNode
@property (nonatomic, assign) NSInteger value;
@property (nonatomic, assign) NSInteger gemLevel;
@property (nonatomic, assign) BOOL mergedThisRound;
- (void)updateValueDisplay:(BOOL)bannerTiles difficultyMode:(int)difficultyMode;
- (void)updateOpacity:(NSInteger)opacityVariable;
- (void)tileHasBeenSelected:(BOOL)tileHasBeenTouched;
@end
Run Code Online (Sandbox Code Playgroud)
有没有办法以某种方式转换这个类,以便可以复制?我查看了http://www.techotopia.com/index.php/Copying_Objects_in_Objective-C和实施NSCopying,我仍然感到困惑,所以非常感谢您的进一步帮助.谢谢!
您收到错误,因为[[NSMutableArray alloc] initWithArray:curLevel.gridTiles copyItems:YES]调用copyWithZone:数组中的每个项目.您的项目必须符合NSCopying您使用此方法,但这是正确的方法.
实施NSCopying:
Tile类以添加协议,即@interface Tile : CCNode <NSCopying>- (id)copyWithZone:(NSZone *)zone在Tile实现中实现该方法.Tile并将其所有属性分配给当前实例的属性.| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |