Проблемы моделирования объектов данных Xcode4 - userInfo для атрибутов равен нулю - PullRequest
1 голос
/ 08 ноября 2011

Справочная информация: я использую инструмент моделирования данных, включенный в Xcode 4.2, для настройки моих основных объектов данных.Я написал некоторый код, который преобразует NSManagedObject в словарь, чтобы упростить загрузку данных в веб-сервис как JSON.Я хотел бы отметить некоторые атрибуты сущностей как те, которые не должны быть сериализованы в JSON.Я надеялся добиться этого, добавив ключ и значение в «Данные пользователя» каждого атрибута, который я не хотел сериализовать.Выполнение этого с использованием инструмента моделирования данных Xcode 4 должно позволить следующему фрагменту кода работать (это часть категории в NSManagedObject, так что это и есть «self»):

NSDictionary *attributesByName = [[self entity] attributesByName];
NSMutableDictionary *valuesDictionary = [NSMutableDictionary dictionaryWithCapacity:[attributesByName count]];

[valuesDictionary setObject:[[self entity] name] forKey:@"ManagedObjectName"];

for (NSString *attributeName in [attributesByName allKeys])
{
    NSAttributeDescription *description = [attributesByName objectForKey:attributeName];
    id dontSerializeValue = [[description userInfo] valueForKey:@"dontSerialize"];
    if (!dontSerializeValue)
    {
        id attributeValue = [self valueForKey:attributeName];
        [valuesDictionary setObject:((attributeValue) ? attributeValue : [NSNull null]) forKey:attributeName];
    }
}

Итак, моя проблемазаключается в следующем: результат [description userInfo] (как используется в приведенном выше контексте) всегда равен nil, поэтому, очевидно, нет пар ключ / значение.У меня есть несколько версий моей модели, но я убедился, что я редактирую «текущую» версию (и сохраняю после добавления ключа и значения в Атрибут Entity).Еще одна забавная вещь: если я выйду из Xcode (очевидно, сначала сохраняю), а затем снова открою его, то все, что я добавил в пользовательскую информацию любого атрибута, исчезнет.У кого-нибудь есть идеи относительно того, что происходит?

1 Ответ

2 голосов
/ 09 ноября 2011

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

Xcode 4 имеет «Минимальную версию инструментов»свойство в разделе «Основная модель данных» в Инспекторе файлов при выборе файла xcdatamodel.Значение этого свойства для моей модели данных было «Xcode 3.2».По какой-то причине я изменил это значение на «Xcode 4.2».Внезапно мои объекты NSAttributeDescription имеют userInfo, возвращающую то, что я ожидаю!

Мне бы хотелось, чтобы было больше документации для моделирования данных с использованием Xcode 4. Когда я выполнял поиск, большинство документов Apple не было обновлено, чтобы отразитьизменения, внесенные в Xcode 4.

В любом случае, надеюсь, этот пост поможет кому-то избавить от головной боли, через которую я прошел.

...