EXC_BAD_ACCESS lors de la définition d'entier à autre chose que zéro

J'ai cet object:

@interface Song : NSManagedObject @property (nonatomic, strong) NSSsortingng *songName; @property (nonatomic) int32_t achievedPoints; 

Quand je définis les propriétés comme ça

 Song *song1 = [[SongStore sharedStore] createSong]; song1.songName = @"Song 1"; song1.achievedPoints = 0; 

tout fonctionne, cependant une fois que j'essaye de mettre la variable completedPoints à quelque chose d'autre que 0 j'obtiens un EXC_BAD_ACCESS.

C'est ce que fait la méthode createSong :

 - (Song *)createSong { double order; if ([allSongs count] == 0) { order = 1.0; } else { order = [[allSongs lastObject] orderingValue] + 1.0; } Song *p = [NSEntityDescription insertNewObjectForEntityForName:@"Song" inManagedObjectContext:context]; [p setOrderingValue:order]; [allSongs addObject:p]; return p; } 

Je n'ai aucune idée pourquoi get la valeur et le mettre à 0 fonctionne mais rien d'autre que zéro bloque le programme. Toute aide est grandement appréciée.

Cela m'est déjà arrivé une fois. Je ne sais pas exactement quels parameters sont corrompus, mais il existe un paramètre dans votre model d'object géré, qui contrôle si la class doit utiliser des valeurs primitives (int, float, etc.) ou des valeurs d'object (NSNumber * , etc) pour définir ses valeurs. Si cela se gâte, et que vous pensez que vous définissez une primitive lorsque vous définissez un object, les events suivants se produisent:

 //song1.achievedPoints = 0; song1.achievedPoints = (NSNumber *)0x00000000; //This is OK because it is the same as nil //song1.achievedPoints = 1; song1.achievedPoints = (NSNumber *)0x00000001; //You can see why this is bad! 

Ma solution consistait à régénérer la class via le model de sous-class Create NSManagedObject, en vérifiant que Use Scalar Values ​​for Primitives était coché.

Ce problème m'est arrivé parce que l'entité n'était pas correctement liée à mes files de class. Lorsque cela se produit, datatables de base créent leur propre sous-class dynamicment, plutôt que d'utiliser la mienne, et les setters de cette sous-class attendent des primitives encadrées.

Vous pouvez résoudre ce problème en vous assurant que la propriété "Class" de votre entité dans le file model est définie sur la class correcte et non sur NSManagedObject par défaut.

Configuration de l'entité

Lorsque vous utilisez le model de sous-class Create NSManagedObject de XCode, XCode définit automatiquement cette valeur pour l'entité correspondante dans le file de model. C'est probablement ce qui a réglé le problème de borrrden. Cependant, vous devriez pouvoir get le même résultat sans créer de nouveaux files en vous assurant que cette valeur est correctement définie.