设置NSNumber属性时,此核心数据的任何解决方案都与exc_bad_access相关吗?

时间:2012-02-24 17:07:03

标签: ios xcode core-data exc-bad-access nsnumber

所以我的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

3 个答案:

答案 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。这将允许您传入一个直的整数。