SWIFT Использование Stringsdict и множественного числа - PullRequest
0 голосов
/ 24 декабря 2018

В моем iOS-приложении на одном из экранов я использую метку, текст которой должен меняться в зависимости от количества объектов: одно яблоко, два яблока S и другие .. Я создал Localizable.stringdict file:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>searches</key>
<dict>
    <key>NSStringLocalizedFormatKey</key>
    <string>%#@search_count@</string>
    <key>search_count</key>
    <dict>
        <key>NSStringFormatSpecTypeKey</key>
        <string>NSStringPluralRuleType</string>
        <key>NSStringFormatValueTypeKey</key>
        <string>s</string>
        <key>one</key>
        <string>остался %s поиск</string>
        <key>many</key>
        <string>осталось %s поиска</string>
        <key>other</key>
        <string>осталось %s поиска</string>
    </dict>
</dict>

Позже в классе viewController я создал функцию

  private func searches(_ count: UInt) {
     let format: String = NSLocalizedString("searches", comment: "")
     let result: String = String.localizedStringWithFormat(format, count)
     print(result)
  }

и вызвал эту функцию в viewDidLoad.

При запуске приложения происходит сбой с ошибкой Поток 1: EXC_BAD_ACCESS (код = 1, адрес = 0x0) .

Отладчик указывает строку, где Результат создано.Насколько я понимаю, проблема в том, что Формат не создан.

Как можно решить эту проблему?

1 Ответ

0 голосов
/ 24 декабря 2018

Ваш словарь указывает «s» как спецификатор формата строки, то есть для строки C.Для UInt (который является NSUInteger как тип Foundation C) вместо этого должно быть «lu» (сравните Спецификаторы формата строки ):

<key>NSStringLocalizedFormatKey</key>
<string>%#@search_count@</string>
<key>search_count</key>
<dict>
    <key>NSStringFormatSpecTypeKey</key>
    <string>NSStringPluralRuleType</string>
    <key>NSStringFormatValueTypeKey</key>
    <string>lu</string>
    <key>one</key>
    <string>остался %lu поиск</string>
    <key>many</key>
    <string>осталось %lu поиска</string>
    <key>other</key>
    <string>осталось %lu поиска</string>
</dict>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...