我有这个对象:
@interface Song : NSManagedObject
@property (nonatomic, strong) NSString *songName;
@property (nonatomic) int32_t achievedPoints;
当我设置这样的属性时
Song *song1 = [[SongStore sharedStore] createSong];
song1.songName = @"Song 1";
song1.achievedPoints = 0;
一切正常,但是一旦我尝试将achievedPoints
变量设置为0以外的其他变量,我就会得到一个EXC_BAD_ACCESS。
这是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;
}
我不知道为什么获取值并将其设置为0可以工作,但除零之外的任何事情都会使程序崩溃。任何帮助都非常感谢。
答案 0 :(得分:4)
这件事发生在我之前。我不确切知道哪些设置搞砸了,但是我认为管理对象模型中有一个设置可以控制类是否应该使用原始值(int,float等)或对象值(NSNumber *)等)设置其值。如果这搞砸了,并且您认为在实际设置对象时正在设置基元,则会发生以下情况:
//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!
我的解决方案是通过创建NSManagedObject子类模板重新生成类,确保选中使用基元的标量值。
答案 1 :(得分:0)