После обновления до Xcode 11 и iOS 13 я начал постоянно получать эту ошибку:
Неустранимая ошибка: недостаточно места, выделенного для копирования содержимого строки
Мне удалосьсузить код, связанный с авариями, до этого небольшого фрагмента. Вы можете вставить его в приложение для iOS или даже на игровую площадку, и он вылетит:
// Test. This code crashes even in a playground.
let h = 3, w = 3
// No crash without "?" symbol!
let fieldStrings: [String] = ["?", "3", "3", "4", "1", "2", "2", "4", "2"]
let maxLength = fieldStrings.reduce(0) { (maxLength, s) in max(maxLength, s.count) }
print(maxLength) // 1
// No crash without padding!
let paddedFieldStrings = fieldStrings.map { s in
s.padding(toLength: maxLength, withPad: " ", startingAt: 0)
}
var lines = [String]()
for y in 0..<h {
var line = ""
for x in 0..<(w - 1) {
// CRASH HERE! x = 0, y = 0
line += paddedFieldStrings[x * h + y] + " "
}
line += paddedFieldStrings[(w - 1) * h + y]
lines.append(line)
}
Оригинальный код отвечал за печать описания игрового поля. До iOS 13 все работало хорошо. Я заметил, что здесь необходимы две точки (помимо добавления строки):
- Символ «эмодзи» «страница с завитком» - U + 1F4C3
padding(toLength:withPad)
Авария также повторяется с другими смайликами.
Я не думаю, что этот вопрос является дубликатом, потому что мой случай не включает многопоточность или базу данных. Так что, пожалуйста, не отмечайте.
Мне кажется, что это ошибка, и я сообщу об этом Apple, но сейчас нам нужно найти обходной путь.
Swift 5.