所以我的CoreData模型目前只有一个实体。它有几个属性,为了测试目的,我在applicationdidfinishlaunching方法中设置了这些属性。一旦我设置了NSNumber(Integer 16或float)属性,它就会获得EXC_BAD_ACCESS异常。
字符串属性工作并存储,我用fetch测试了它。 如果我将整数16编号设置为0,它不会崩溃,但我想这是因为它被分配为nil。
由xcode创建的核心数据NSManagedObject:
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@interface ReminderSchedule : NSManagedObject
@property (nonatomic, retain) NSNumber * intervalSize;
@property (nonatomic, retain) NSNumber * intervalType;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSNumber * quantity;
@property (nonatomic, retain) NSDate * startDate;
@property (nonatomic, retain) NSNumber * unit;
@end
在appdelegate中的applicationdidfinishlaunching方法内
ReminderSchedule *reminderSchedule;
reminderSchedule = [NSEntityDescription insertNewObjectForEntityForName:@"ReminderSchedule" inManagedObjectContext:self.managedObjectContext];
reminderSchedule.unit = 1; <==== EXC_BAD_ACCESS
reminderSchedule.quantity = 4.0f; <==== EXC_BAD_ACCESS
reminderSchedule.name = @"this works";
reminderSchedule.intervalType = 2; <==== EXC_BAD_ACCESS
reminderSchedule.intervalSize = 2; <==== EXC_BAD_ACCESS
[self.managedObjectContext save:nil]; //just for testing, never gets here
答案 0 :(得分:1)
如果它们中的任何一个需要加倍,你可以将它们包装在这样的NSNumber对象中:
reminderSchedule.quantity = [NSNumber numberWithDouble:(double)]];
先声明双重。
答案 1 :(得分:0)
reminderSchedule.unit = [NSNumber numberWithInt:1];
这将保存类型为NSNumber的NSObject,而不是原始整数。
答案 2 :(得分:0)
你传入'int'而不是NSNumber。
试试这个:
reminderSchedule.unit = [NSNumber numberWithInt:1]; // this won't crash
您也可以将@property重新格式化为NSInteger。这将允许您传入一个直的整数。