Как я переопределяю презентацию NSError, когда привязка включена?

Как математик, я бы сказал, что цвет является основным в том и только в том случае, если он является членом набора {красных, зеленых, синих} основных цветов.

И это именно то, что вы могли бы сказать в Delphi:

isPrimary := Colour in [clRed, clGreen, clBlue]

На самом деле, я использую эту технику очень часто. В прошлый раз было три дня назад. Реализуя свой собственный интерпретатор языка сценариев, я написал

const
  LOOPS = [pntRepeat, pntDoWhile, pntFor];

, а затем в несколько строк

if Nodes[x].Type in LOOPS then

Философскую часть вопроса

@supercat, и т.д. («Что касается того, почему никто этого не сделал, я не знаю».):

Вероятно, потому, что разработчики языков программирования - математики (или, по крайней мере, математически склонные). Если математику нужно установить равенство двух объектов, она естественным образом скажет

X = Y,

. Но если X может быть одной из множества вещей A, B, C, ..., тогда она определит набор S = {A, B, C, ...} этих вещей и напишет

X ∈ S.

Действительно, это чрезвычайно распространено, что вы (математики) пишете X ∈ S, где S - это множество

S = {x ∈ D; P(x)}

объектов в некоторой вселенной D, обладающих свойством P, вместо записи P(X). Например, вместо того, чтобы сказать «x является положительным действительным числом» или «PositiveReal (x)», можно сказать x ∈ ℝ⁺.

7
задан Quinn Taylor 30 June 2009 в 19:52
поделиться

1 ответ

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

Вы можете использовать NSUnderlyingErrorKey , чтобы обернуть одну ошибку (объект для этого ключа) в другую ошибку (ту, чья userInfo содержит этот ключ).

Единственный другой вариант, который я вижу, - это удаление NSFormatter. уравнения и использование validateValue: forKey: error: в моих управляемых объектах Core Data для обработки проверки. Для меня это не так много смысла, как использование средства форматирования, но, по крайней мере, у меня был бы полный контроль над объектом NSError.

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

Если рассматриваемая проверка должна происходить на уровне представления, создайте подкласс своего класса NSFormatter (если вы еще этого не сделали) и реализуйте getObjectValue: forString: errorDescription: , чтобы получить более конкретное описание ошибки. (Я не знаю, действительно ли Bindings использует это описание ошибки. Вы должны проверить.)

Если проверка должна происходить на уровне модели, реализуйте validate : error: (единственный -property версия validateValue: forKey: error: ) в вашем подклассе NSManagedObject.

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

4
ответ дан 7 December 2019 в 14:37
поделиться