Любое решение для этих основных данных, связанных exc_bad_access при установке атрибута NSNumber? - PullRequest
0 голосов
/ 24 февраля 2012

Итак, моя модель CoreData на данный момент имеет одну сущность. Он имеет несколько атрибутов, для целей тестирования я установил эти атрибуты в методе applicationdidfinishlaunching. Как только я устанавливаю атрибут NSNumber (целое число 16 или число с плавающей точкой), он получает исключение EXC_BAD_ACCESS.

Строковые атрибуты работают и сохраняются, я проверил это с помощью fetch. Если я установлю число Integer 16 равным 0, это не приведет к сбою, но я предполагаю, что это потому, что тогда ему присваивается ноль.

Основные данные NSManagedObject, созданные xcode:

#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

Внутри приложения запущен метод запуска в приложении applelegate

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 ]

1 голос
/ 24 февраля 2012

Если любой из них должен быть удвоен, вы можете обернуть его в объект NSNumber следующим образом:

reminderSchedule.quantity = [NSNumber numberWithDouble:(double)]];

просто сначала объявите double.

0 голосов
/ 24 февраля 2012

Вы передаете int, а не NSNumber.

Попробуйте это:

reminderSchedule.unit = [NSNumber numberWithInt:1]; // this won't crash

Вы также можете переформатировать @property в NSInteger.Это позволит вам передать в целое число.

0 голосов
/ 24 февраля 2012
 reminderSchedule.unit = [NSNumber numberWithInt:1];

Это сохранит объект NSO типа: NSNumber, а не необработанное целое число.

...