objective-c cocoa-touch ios8 nsset skspritenode

objective c - Los pools de SKSpriteNode en iOS 8 parecen estar asignados a la superposición de memoria



objective-c cocoa-touch (1)

Me podría estar perdiendo algo. Pero mi aplicación actual en la tienda de aplicaciones funciona en iOS 7, pero en iOS 8 falla completamente porque no creará un grupo de sprites preasignados. Aparecen escritos en la misma dirección a menos que los sprites tengan propiedades específicamente diferentes.

En iOS 7, el siguiente código produce un conjunto con 4 objetos únicos. En iOS 8, el mismo código produce un conjunto con solo 1 objeto:

NSMutableSet *aSet = [NSMutableSet set]; SKColor *sameColor = [SKColor redColor]; CGSize sameSize = CGSizeMake(10, 10); for (int i = 0; i < 4; i++) { //allocate a brand new sprite SKSpriteNode *thisSprite1 = [[SKSpriteNode alloc] initWithColor:sameColor size:sameSize]; [aSet addObject:thisSprite1]; } NSLog(@"aSet Count: %i", aSet.count);

Resultado iOS8:

2014-09-09 15: 06: 43.065 MSM [383: 27490] aSet Count: 1

¿Me estoy volviendo loco? Sorprendentemente, casi toda mi aplicación se basa en este concepto de código que se repite una y otra vez. Si hago lo mismo, pero uso algo como NSObject , entonces el problema desaparece, por lo que parece ser un nuevo cambio en SKSprite . Sé que puedo solucionarlo con algunas cosas locas, pero es un gran dolor, ya que no debería tener que hacer eso, y esperaba evitar otra presentación de la versión.


Gracias a Josh por la dirección sobre cómo resolver este nuevo bache en la carretera.

Subclasé SKSpriteNode, anulando -isEqual y -hash, para ser lo que mi mejor conjetura es la implementación de NSObject. Luego hice un Find / Replace All in Project para "SKSpriteNode" para el nombre de mi subclase, y todo está de regreso en la versión iOS 7:

-(BOOL)isEqual:(id)object{ return self == object; } - (NSUInteger)hash { return (NSUInteger)self; }