2013-05-20 2 views
0

У меня есть некоторые сомнения относительно хранения простых «int» или «short» (int16_t) атрибутов в структуре управления данными «Core Data» (на iOS 6 в моем случае) , Я попытался использовать его различными способами и счел невозможным сделать это, не выполнив вышеупомянутое исключение. Теперь, спустя несколько недель, я нашел эту статью внутри StackOverflow и, похоже, кто-то делает то, что:Основные данные: «EXC_BAD_ACCESS» при использовании простого типа данных типа

См следующий пример для хранения Перечень в нижнем ответ от «Daniel Эггерт»: Best way to implement Enums with Core Data

Здесь похоже, что он использует простой «int16_t» и сопоставляет его с записью «Основные данные» «Целое число 16» внутри модели данных ... действительно ли это работает? Я попробовал его точно так же, как указано (даже используя одно и то же название :-)), и он не работает с известным исключением «EXC_BAD_ACCESS» ... как и ожидалось.

Любые мысли об этом? Я неправильно понял связанный ответ?

---- Редактировать: --- Интересно, как кто-то оценивает этот вопрос (который даже правильно связывает другой вопрос) вниз, но не имеет ответа ?! Во всяком случае:

Теперь я попробовал то же самое с образцом приложения «Событие» от Apple, и он работает. Мой собственный тест не работает, все еще. Основное различие между приложениями:

  • Мой класс управляемых не генерируется автоматически, я повторно существующий класс
  • Я до сих пор есть некоторые свойства с «@synthesize» в моем существующем классе

Мои собственный объект (управляемый объект): ч:

@interface TestEntity : NSManagedObject 
{ 
} 
@property (nonatomic) int64_t testAttribute; 
@end 

м:

@dynamic testAttribute; 

модель тип данных: "Integer 64".

other.m:

TestEntity *testEntity = (TestEntity *)[NSEntityDescription insertNewObjectForEntityForName:@"Trip" inManagedObjectContext:[GenericDAO getManagedContext]]; 
[testEntity setTestAttribute : 4]; //this triggers the exception 
+2

Можете ли вы разместить свой код? Я использовал код в ссылке без проблем –

+2

Этот ответ выглядит хорошо, если он не работает для вас, а затем отправляйте некоторый код, чтобы мы могли видеть, как вы его реализовали. –

+0

является то, что сгенерированный код? Я предполагаю, что реальный объект ожидает NSNumber ... –

ответ

0

После вдаваясь в подробности со всем вопросом на прошлой неделе, я узнал, что с помощью IOS 6 и последние XCode (4.6.2 в моем случае) я могу сделать все, точно так, как указано в ссылке, упомянутой в моем вопросе. Проблемы, которые я видел, связаны с набором технических деталей, которые просто не документированы. Как я узнал об этом? Я просто сделал следующие шаги, чтобы проверить мои сущности:

  • Создайте новый пустой проект с Xcode, которые поддерживают Core Data
  • Используйте «Редактор» пункт меню «импорт», когда, находясь в Xcode, имея модель данных open (выберите «XY.xcdatamodeld», который вы хотите использовать с Core-Data.
  • Вы увидите, какие элементы импортированы в вашу модель и которые «неправильно» указаны (либо по настройкам свойств, либо как)
  • просто создайте все атрибуты, которые вы изначально хотели кодировать как примитивные типы данных, и выберите пункт меню «экспорт» в меню «редактор» (когда режим данных l выбрано!). Осторожно: установите флажок «создать примитивный тип данных», чтобы получить базовые типы вместо свойств Cocoa/object.

Чтобы проверить обратно свой первоначальный проект, сделать это также в оригинальном проекте, в моем случае Core-Data и даже пункты меню выглядели по-разному (некоторые опции неактивны выход):

  • Do те же шаги (импортирующие объекты в модель данных) в старом/вашем текущем проекте.
  • Если результат отличается, это скажет вам, что настройки проекта как-то несовместимы/стары, и вы можете изменить настройки проекта, чтобы выяснить, какие из них влияют на поведение основных данных.
  • Также попробуйте использовать функцию экспорта, чтобы проверить, правильно ли он генерирует код.

Другие важные советы: вы можете выбрать атрибуты в редакторе модели данных Core-Data и скопировать/вставить их между проектами. Это очень удобно, если вы хотите перенести некоторые объекты/свойства для тестирования. Не просто скопируйте весь файл настроек «cxdatamodeld», он сохранит свои настройки из старого проекта (я попробовал его два раза, чтобы проверить это).

0

Проверьте правильность установки имени, класса и родительской сущности для всех объектов в файле модели основных данных. Проверьте, все ли имена классов соответствуют вашим именам сущностей. Причиной проблемы является то, что при компиляции модели он не находит файл заголовка с установщиком.