Основные данные и пользовательские атрибуты - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть приложение, которое в конечном итоге является программой базы данных. В настоящее время я использую NSMutableArray «элементных» объектов, которые имеют пару десятков предопределенных свойств и одно свойство, которое является изменяемым словарем, используемым для пользовательских свойств (которые определяются во время выполнения).

Для этого я использую valueForUndefinedKey:, что вызывает поиск в изменяемом словаре "пользовательские поля". Все это работает очень хорошо и позволяет мне создавать предикаты, основанные как на встроенных свойствах, так и на пользовательских свойствах.

Я подумываю переместить его в Базовые данные, но не могу определить способ разрешить Пользователь для определения свойств (атрибуты в Core Data-говорят). Я могу создать трансформируемый атрибут, представляющий собой словарь, в который пользователь может добавлять ключи / значения, но нет способа искать его.

Я также подумал, что мои встроенные свойства / атрибуты могут быть выполнены в Базовые данные, а затем отдельный массив неосновных данных могут содержать словари для моих пользовательских полей (в основном так же, как сейчас). Будет ли это работать хорошо?

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

Так, например, мои элементы - это «Персона», а встроенные атрибуты - «Имя», «День рождения», «Номер телефона» и т. д. c, а затем пользователь может добавить к ним такие поля, как «Марка, Модель». Кредитный рейтинг ", et c.

Я не уверен, что Core Data подходит для этого, когда мое приложение должно разрешать создание пользовательских полей / свойств / атрибутов, сохраняя при этом их можно искать с помощью пользовательских предикатов.

1 Ответ

2 голосов
/ 10 апреля 2020

Рассматривали ли вы определение сущности для хранения пользовательских пар ключ / значение? Что-то вроде:

enter image description here

Это позволит вам продолжать использовать предикаты для запроса ваших данных, например:

let request = NSFetchRequest<Person>(entityName: "Person")
request.predicate = NSPredicate(format: "userDefined.key == %@", "somekey")

Или запросы, основанные на значении или типе данных:

request.predicate = NSPredicate(format: "userDefined.value == %@", "somevalue")
request.predicate = NSPredicate(format: "userDefined.dataType == %@", "String")

Вы можете продолжать использовать трансформируемый тип для UserDefined.value или двоичный тип, используя dataType в качестве подсказки для того, как преобразовать / декодировать данные .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...