Ошибка на стороне NOT NULL. В какой-то момент вам придется решить, что означает «NULL» в вашем приложении - скорее всего, для разных столбцов это будет по-разному. Некоторые из распространенных случаев: «не указано», «неизвестно», «неприменимо», «еще не произошло» и т. Д. Вы будете знать, когда вам нужно одно из этих значений, а затем вы можете соответствующим образом разрешить столбец NULLable и закодируйте логику вокруг него.
Разрешение случайным вещам быть NULL, рано или поздно, всегда кошмар IME. Используйте NULL осторожно и экономно - и знайте, что это значит в вашей логике.
Редактировать: Кажется, есть идея, что я выступаю за НЕТ нулевых столбцов, когда-либо. Это нелепо. NULL полезен , но только там, где ожидается.
Хороший пример - пример Le Dorfier DateOfDeath. NULL DateOfDeath будет означать «еще не произошло». Теперь я могу написать мнение LivingPersons WHERE DateOfDeath IS NULL
.
Но что означает NULL OrderDate? Что заказ еще не сделан? Даже если есть запись в таблице заказов? Как насчет пустого адреса? Именно эти мысли должны пройти через вашу голову, прежде чем вы позволите NULL быть значением.
Возвращаясь к DateOfDeath - запрос людей WHERE DateOfDeath > '1/1/1999'
не вернул бы NULL-записей - даже если мы логически знаем, что они должны умереть после 1999 . Это то, что вы хотите? Если нет, то лучше включить OR DateOfDeath IS NULL
в этот запрос. Если вы разрешите всем столбцам быть NULL, вам придется думать об этом каждый раз, когда вы пишете запрос . IME, это слишком много для умственного налога для 10% или около того столбцов, которые на самом деле имеют законное значение, когда они равны NULL.
Если вы посмотрите на раздел «Строки формата» в Руководстве по программированию форматирования данных для какао :
Строка формата использует шаблоны формата из Технический стандарт Unicode № 35 (эта ссылка относится к версии tr35-6; средства форматирования для Mac OS X v10.4 используют версию tr35-4 ).
Изменить:
Если вы хотите установить строку формата на основе валют, вы можете использовать символ ¤
, например:
[formatter setFormat:@"¤#,##0.00"];
Это добавит символ валюты для текущей локализации вместо ¤
].
Следовательно, применение той же концепции к строке отрицательного формата:
[formatter setFormat:@"-¤#,##0.00"];
Это также применит символ валюты вместо ¤
для текущей локализации.
Хорошо, поэтому ответ что у меня есть работа:
[currencyFormatter setNegativeFormat:@"-¤#,##0.00"];
ключ это whatzit? символ «¤». Не знаете, как это называется? кто угодно? но он представляет локализованную валюту в этих строках формата ...
В этом случае он ищет для формата NSString. Посмотрите здесь подробные сведения о строке формата .
Если вы хотите, чтобы отрицательное значение 12,345,67
отображалось как -12,345,67
, то я считаю, что правильное значение NSString - @ "- #, ## 0.00"
Я также заметил следующее предложение в документе, ссылка на который приведена выше:
Если вы не укажете формат для отрицательные значения, указанный формат для положительных значений используется предшествующий знаком минус (-).
РЕДАКТИРОВАТЬ:
Обновление для 10.4 и более поздних версий: Вот PDF-файл с описанием поведения в 10.4 и более поздних версиях
И, как указано в этом документе, здесь данные о необходимом формате для 10.4 и более поздних версий .
Из этого документа следует, что правильная строка может быть такой: @ "- #, ## 0. ##"