저는이 문제에 대한 해결책을 찾기 위해 많은 시간 동안 노력해 왔으며 다른 스레드는 도움이되지 않았습니다. 기본적으로, 내가 달성하고자하는 것은 커스텀 객체의 배열을 싱글 톤으로 생성하고,이를 내 레벨에로드 한 다음,이 객체에 할당 된 변수가 조작되기 때문에 객체의 복사본을 작성하는 것입니다. 레벨이 완료되면 (또는 실패한 경우에도) 객체를 다시로드 할 수 있도록이 객체를 동일하게 유지해야합니다.사용자 지정 개체를 사용하여 NSMutableArray의 복사본 만들기
다음은 내가 시도한 몇 가지 사항입니다.
- (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
}
위와 동일한 개체 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];
}
여전히 동일한 개체 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
}
위의 경우 런타임 오류가 발생합니다. 나는 복사하고있는 객체가 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
어떻게 든이 클래스를 변형하여 복사 할 수 있습니까? http://www.techotopia.com/index.php/Copying_Objects_in_Objective-C과 Implementing NSCopying을 보았습니다. 여전히 혼란 스럽습니다. 그래서 더 많은 도움을 주시면 감사하겠습니다. 고맙습니다!
감사! 이것은 나를 위해 일했다 =) 이제 나는 그것도 훨씬 더 잘 이해한다. – spaderdabomb