У меня есть NSManangedObject, который отображает все правильные атрибуты в описании сущности.Но всякий раз, когда я пытаюсь получить доступ к одному из атрибутов, он выходит из строя, говоря, что он не совместим с кодированием значения ключа.
Я трижды проверял свою модель данных и класс сущности, и все выглядит правильно.
IЯ не уверен, если это имеет значение, но я получаю доступ к объекту из уведомления.Вот пример:
NSDictionary *dict = notification.userInfo;
NSSet *set = [dict objectForKey:NSInsertedObjectsKey];
for (NSManagedObject* managedObject in set) {
NSLog(@"%@", managedObject.entity.attributesByName);
if([managedObject.entity.attributesByName valueForKey:@"defaultid"] != nil) {
NSLog(@"defaultid: %@", [managedObject valueForKey:@"defaultid"]);
}
}
Будет выводить:
{
defaultid = "(<NSAttributeDescription: 0x175c90>), name defaultid, isOptional 1, isTransient 0, entity MyEntity, renamingIdentifier defaultid, validation predicates (\n), warnings (\n), versionHashModifier (null)\n userInfo {\n}, attributeType 100 , attributeValueClassName NSNumber, defaultValue 0";
title = "(<NSAttributeDescription: 0x175ce0>), name title, isOptional 1, isTransient 0, entity MyEntity, renamingIdentifier title, validation predicates (\n), warnings (\n), versionHashModifier (null)\n userInfo {\n}, attributeType 700 , attributeValueClassName NSString, defaultValue (null)";
}
И затем произойдет сбой со следующим:
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<_NSObjectID_64_6 0x6119020> valueForUndefinedKey:]: this class is not key value coding-compliant for the key defaultid.'
Любое понимание будет с благодарностью.
РЕДАКТИРОВАТЬ:
Уведомление от iCloud, которое вызывает этот метод:
- (void)mergeChangesFrom_iCloud:(NSNotification *)notification {
NSManagedObjectContext* moc = [self managedObjectContext];
[moc performBlock:^{
[self mergeiCloudChanges:notification forContext:moc];
}];
}
Приведенный выше код в методе mergeiCloudChanges.
РЕДАКТИРОВАТЬ 2 (Решено):
Оказывается, я сделал глупую ошибку.Я думал, что [dict objectForKey: NSInsertedObjectsKey] возвратил набор управляемых объектов, но он возвращает набор управляемых идентификаторов.
Это работает:
NSDictionary *dict = note.userInfo;
NSSet *set = [dict objectForKey:NSInsertedObjectsKey];
for (NSManagedObjectID* managedObjectID in set) {
NSManagedObject *newObject = [moc existingObjectWithID:managedObjectID error:nil];
}
Спасибо всем за уделенное время.